Hình ảnh trung tâm theo chiều ngang trong một div


387

Đây có lẽ là một câu hỏi ngu ngốc nhưng vì những cách thông thường của trung tâm sắp xếp một hình ảnh không hoạt động nên tôi nghĩ tôi sẽ hỏi. Làm cách nào tôi có thể căn giữa (theo chiều ngang) một hình ảnh bên trong div container của nó?

Đây là HTML và CSS. Tôi cũng đã bao gồm CSS cho các yếu tố khác của hình thu nhỏ. Nó chạy theo thứ tự giảm dần nên yếu tố cao nhất là nơi chứa mọi thứ và thấp nhất là bên trong mọi thứ.

#thumbnailwrapper {
      color: #2A2A2A;
      margin-right: 5px;
      border-radius: 0.2em;
      margin-bottom: 5px;
      background-color: #E9F7FE;
      padding: 5px;
      border: thin solid #DADADA;
      font-size: 15px
}
    
#artiststhumbnail {
      width: 120px;
      height: 108px;
      overflow: hidden;
      border: thin solid #DADADA;
      background-color: white;
}
    
#artiststhumbnail:hover {
      left: 50px
}
<!--link here-->

<a href="NotByDesign">
  <div id="thumbnailwrapper">

    <a href="NotByDesign">

      <!--name here-->
      <b>Not By Design</b>
      <br>

      <div id="artiststhumbnail">

        <a href="NotByDesign">

          <!--image here-->
          <img src="../files/noprofile.jpg" height="100%" alt="Not By Design" border="1" />
        </a>
      </div>

      <div id="genre">Punk</div>

  </div>

Được rồi, tôi đã thêm đánh dấu mà không có PHP trong nên sẽ dễ nhìn hơn. Cả hai giải pháp dường như không hoạt động trong thực tế. Văn bản ở trên cùng và dưới cùng không thể được căn giữa và hình ảnh phải được căn giữa trong div container của nó. Container bị ẩn tràn nên tôi muốn xem trung tâm của hình ảnh như bình thường nơi lấy nét.


1
Có phải dự định rằng hình ảnh được hiển thị trên cùng một dòng với liên kết đầu tiên (liên kết nghệ sĩ)?
Shoaib

5
imglà tùy thuộc vào text-align: centertrừ khi chúng displayđã được sửa đổi.
Jared Farrish

4
jsfiddle.net/cEgRp - đơn giảntext-align: center
Zoltan Toth

3
Jacob, ít nhất bạn có thể đăng đánh dấu thực tế mà trình duyệt nhìn thấy và không phải là mẫu truyền vào PHP không? Ngoài ra, một jsfiddle.net hoạt động luôn luôn giúp.
Jared Farrish

2
Đừng bận tâm đến nhận xét của tôi - Tôi không nhận thấy cái imgđược đính kèm trong a. Tôi ngốc thật.
Shoaib

Câu trả lời:


835

CSS Guy gợi ý như sau:

Vì vậy, dịch, có lẽ:

#artiststhumbnail a img {
    display:block;
    margin:auto;
}

Đây là giải pháp của tôi trong: http://jsfiddle.net/marvo/3k3CC/2/


10
Tôi không nghĩ rằng đây là một ý tưởng hay và tôi cũng tin rằng có một số cảnh báo margin: autophụ thuộc vào yếu tố chứa có giá trị chiều rộng được chỉ định.
Jared Farrish

4
Tôi vẫn đang cải thiện các kỹ năng CSS của mình, vì vậy cảm ơn về điểm học tập thú vị. Nhưng trong trường hợp này, anh ta đang sử dụng một chiều rộng cố định trên container.
Marvo

1
Chính xác chiều rộng được chỉ định có nghĩa là gì trong bối cảnh này? Chắc chắn có vẻ như kiến ​​thức hữu ích để có.
Shoaib

1
Xem fiddle này tôi đã thực hiện ; Tôi không biết phải nghĩ gì. Những gì bạn đang đề xuất sẽ không làm gì cả, và imgtôi tin rằng sẽ cần một chiều rộng được xác định bằng mọi cách để có bất kỳ ảnh hưởng nào auto.
Jared Farrish

2
Bạn đã không thực sự thực hiện các giải pháp tôi đã trình bày. Thứ hai, div kèm theo có chiều rộng 120px, tương đương với chiều rộng của hình ảnh, khiến bạn khó thấy liệu nó có thực sự tập trung vào hình ảnh hay không. Đây là giải pháp của tôi: jsfiddle.net/marvo/3k3CC/2
Marvo

88

CSS flexbox có thể làm điều đó với justify-content: centerphần tử cha ảnh. Để duy trì tỷ lệ khung hình của hình ảnh, thêm align-self: flex-start;vào nó.

HTML

<div class="image-container">
  <img src="http://placehold.it/100x100" />
</div>

CSS

.image-container {
  display: flex;
  justify-content: center;
}

Đầu ra:


4
Giải pháp tuyệt vời khi trình duyệt hỗ trợ này, cái mà tôi làm. Cũng có thể sử dụng align-itemsđể trung tâm theo chiều dọc. Các giải pháp lề khác nhau không phù hợp với tôi vì phần tử được căn giữa không có thuộc tính chiều rộng và chiều cao.
Marc Rochkind

1
Trong trường hợp của tôi, div có kích thước nhất định (ví dụ 50px) và điều này sẽ kéo dài hình ảnh ở mức 50px.
Tối đa

1
@Max Trong trường hợp đó, bạn có thể áp dụng align-selfcho thành phần hình ảnh như jsfiddle.net/3fgvkurd
Manoj Kumar

69

Tôi chỉ tìm thấy giải pháp này bên dưới trên trang CSS của W3 và nó đã trả lời vấn đề của tôi.

img {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Nguồn: http://www.w3.org/Style/Examples/007/center.en.html


Tôi đang sử dụng max-width: 100%; max-height: 100%;để thay đổi kích thước hình ảnh nếu màn hình nhỏ hơn hình ảnh, nhưng trong trường hợp này nó không nằm ở giữa. Bất kỳ đề xuất nào về cách tập trung vào hai thuộc tính đó được áp dụng
Alexey Strakh

18

Điều này cũng sẽ làm điều đó

#imagewrapper {
    text-align:center
}

#imagewrapper img {
    display:inline-block;
    margin:0 5px
}

Ý của bạn là text-align:center;margin:0 5px;? Tôi đã thêm một;
jagb

Dấu chấm phẩy @jagb không bắt buộc đối với thuộc tính cuối cùng trong khối chọn.
TylerH

4
@TylerH Đúng vậy, dấu chấm phẩy không bắt buộc đối với thuộc tính cuối cùng trong khối chọn nhưng nó luôn tiết kiệm để sử dụng dấu chấm phẩy .. Nếu tôi viết tệp CSS, nhà phát triển khác sẽ chỉnh sửa tệp của tôi sau, họ sẽ thêm một số mã (sau dòng với dấu chấm phẩy bị thiếu, dòng tôi đã viết trước đó trong tệp CSS đó) và chiều cao, chiều rộng hoặc khai báo khác của chúng không hoạt động (hoặc tệ hơn nữa, chúng không nhận thấy rằng nó không hoạt động). Tôi sẽ nói rằng an toàn hơn khi để lại dấu chấm phẩy. Đây là lý do tại sao tôi sử dụng dấu chấm phẩy và không bao giờ bỏ dấu chấm phẩy.
jagb

@jagb Nếu nhà phát triển khác chỉnh sửa tệp của bạn sau này, họ sẽ thêm dấu chấm phẩy khi cần thiết hoặc đó sẽ là vấn đề của họ khi viết mã có lỗi. Câu trả lời cho nhận xét ban đầu của bạn vẫn là: "dấu chấm phẩy trên dòng cuối cùng trong CSS là một lựa chọn kiểu".
TylerH

Tôi đồng ý với jagb. Trang web này nên thúc đẩy sự lựa chọn phong cách tốt. Một phong cách tốt không để lại mã phía sau dễ bị phá vỡ. Đặt dấu chấm phẩy trên mỗi dòng sẽ khiến bạn mất 1/10 giây, việc gỡ lỗi để tìm một dấu chấm phẩy bị thiếu có thể khiến bạn mất hàng giờ. Đó là lý do tại sao các công ty công nghệ lớn nhấn mạnh vào nó: Hướng dẫn về Phong cách HTML / CSS của Google - Dừng tuyên bố
Georg Patscheider

14

Điều tốt nhất tôi đã tìm thấy (dường như hoạt động trong tất cả các trình duyệt) để định tâm hình ảnh, hoặc bất kỳ yếu tố nào, theo chiều ngang là tạo một lớp CSS và bao gồm các tham số sau:

CSS

.center {
    position: relative;          /* where the next element will be automatically positioned */
    display: inline-block;       /* causes element width to shrink to fit content */
    left: 50%;                   /* moves left side of image/element to center of parent element */
    transform: translate(-50%);  /* centers image/element on "left: 50%" position */
}

Sau đó, bạn có thể áp dụng lớp CSS mà bạn đã tạo cho thẻ của mình như sau:

HTML

<img class="center" src="image.jpg" />

Bạn cũng có thể nội tuyến CSS trong (các) phần tử của mình bằng cách thực hiện như sau:

<img style="position: relative; display: inline-block; left: 50%; transform: translate(-50%);" src ="image.jpg" />

... nhưng tôi không khuyên bạn nên viết CSS nội tuyến vì sau đó bạn phải thực hiện nhiều thay đổi trong tất cả các thẻ bằng mã CSS định tâm nếu bạn muốn thay đổi kiểu.


đã thực hiện công việc, nhưng để tương thích trình duyệt, bạn sẽ cần sử dụng các hình thức chuyển đổi khác.
Jay Khói

11

Đây là những gì tôi đã làm:

<div style="height: 600px">
   <img src="assets/zzzzz.png" alt="Error" style="max-width: 100%; 
        max-height: 100%; display:block; margin:auto;" />
</div>

Việc này sẽ giới hạn chiều cao hình ảnh xuống 600px và sẽ nằm ở giữa theo chiều ngang (hoặc thay đổi kích thước xuống nếu chiều rộng cha nhỏ hơn) vào vùng chứa cha, duy trì tỷ lệ.


8

Tôi sẽ đi ra ngoài trên một chi và nói rằng sau đây là những gì bạn đang theo đuổi.

Lưu ý, những điều sau đây tôi tin đã vô tình bị bỏ qua trong câu hỏi (xem bình luận):

<div id="thumbnailwrapper"> <!-- <<< This opening element -->
    <div id="artiststhumbnail">
...

Vì vậy, những gì bạn cần là:

#artiststhumbnail {
    width:120px;
    height:108px;
    margin: 0 auto; /* <<< This line here. */
    ...
}

http://jsfiddle.net/userdude/XStjX/3/


Hmm ... Tôi cá là nó sẽ hoạt động. Tôi đã căn giữa IMAGE trong giải pháp của mình, nhưng tôi có thể thấy câu hỏi có thể được hiểu như thế nào khi căn giữa hình ảnh bao quanh div bên trong một div khác. Dù bằng cách nào, cùng một giải pháp.
Marvo

Không có giải pháp nào đang hoạt động trong thực tế. Tôi đã thử cả hai giải pháp trước khi nó không hoạt động. Vui lòng tham khảo bản chỉnh sửa trong câu hỏi
Jacob Windsor

3

Để căn giữa một hình ảnh theo chiều ngang, điều này hoạt động:

<p style="text-align:center"><img src=""></p>

Có, nhưng nếu bạn có kế hoạch hiển thị hình ảnh dưới dạng khối để ngăn khoảng trắng nhàm chán bên dưới nó, thì nó sẽ không hoạt động nữa ...
Tiến sĩ Fred

3

Thêm phần này vào CSS của bạn:

#artiststhumbnail a img {
   display: block;
   margin-left: auto;
   margin-right: auto;
}

Chỉ cần tham chiếu một yếu tố con mà trong trường hợp đó là hình ảnh.


2
điều này tốt cho khi bạn vẫn muốn truy cập vào lề trên, .. tốt hơn so với lề 0 tự động
Tallgirltaadaa

2

Đặt một pixel pixel bằng nhau cho trái và phải:

<div id="artiststhumbnail" style="padding-left:ypx;padding-right:ypx">

1

Đặt hình ảnh bên trong a newDiv. Làm cho chiều rộng của chứa divgiống như hình ảnh. Áp dụng margin: 0 auto;cho newDiv. Điều đó nên tập trung vào divbên trong container.


1

Sử dụng định vị. Những điều sau đây làm việc cho tôi ... (Theo chiều dọc và theo chiều dọc)

Với zoom đến trung tâm của hình ảnh (hình ảnh lấp đầy div):

div{
    display:block;
    overflow:hidden;
    width: 70px; 
    height: 70px;  
    position: relative;
}
div img{
    min-width: 70px; 
    min-height: 70px;
    max-width: 250%; 
    max-height: 250%;    
    top: -50%;
    left: -50%;
    bottom: -50%;
    right: -50%;
    position: absolute;
}

Không phóng to đến trung tâm của hình ảnh (hình ảnh không lấp đầy div):

   div{
        display:block;
        overflow:hidden;
        width: 100px; 
        height: 100px;  
        position: relative;
    }
    div img{
        width: 70px; 
        height: 70px; 
        top: 50%;
        left: 50%;
        bottom: 50%;
        right: 50%;
        position: absolute;
    }

1

bạn có thể căn chỉnh nội dung của mình bằng hộp flex với mã tối thiểu

HTML

<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

CSS

.image-container{
  width:100%;
  background:green;
  display:flex;

.image-container{
  width:100%;
  background:green;
  display:flex;
  justify-content: center;
  align-items:center;
}
<div class="image-container">
<img src="https://image.freepik.com/free-vector/modern-abstract-background_1048-1003.jpg" width="100px"> 
</div>

liên kết js fiddle https://jsfiddle.net/7un6ku2m/


1

Căn giữa một hình ảnh trong một div

/* standar */
div, .flexbox-div {
  position: relative;
  width: 100%;
  height: 100px;
  margin: 10px;
  background-color: grey;  
}

img {
  border: 3px solid red;
  width: 75px;
  height: 75px;
}
/* || standar */


/* transform */
.transform {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  -ms-transform: translate(-50%, -50%); /* IE 9 */
  -webkit-transform: translate(-50%, -50%); /* Chrome, Safari, Opera */ 
}
/* || transform */


/* flexbox margin */
.flexbox-div {
  display: -webkit-flex;
  display: flex;
  background-color: lightgrey; 
}

.margin-img {
  margin: auto;
}
/* || flexbox margin */


/* flexbox justify align */
.flexbox-justify {
  justify-content: center;
}

.align-item {
  align-self: center;
}
/* || flexbox justify align */
<h4>Using transform </h4>  
<div>
  <img class="transform" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox margin</h4>  
<div class="flexbox-div">
  <img class="margin-img" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>

<h4>Using flexbox justify align</h4>  
<div class="flexbox-div flexbox-justify">
  <img class="align-item" src="http://placeholders.org/250/000/fff" alt="Not By Design" border="1" />
</div>


1

Tôi đã thử một vài cách. Nhưng cách này hoạt động hoàn hảo với tôi

<img src="~/images/btn.png" class="img-responsive" id="hide" style="display: block; margin-left: auto; margin-right: auto;" />

1

Một cách phản hồi để căn giữa một hình ảnh có thể như thế này:

.center {
    display: block;
    margin: auto;
    max-width: 100%;
    max-height: 100%;
}

0

Nếu bạn phải làm nội tuyến này (chẳng hạn như khi sử dụng một hộp đầu vào),
đây là một hack nhanh chóng mà làm việc cho tôi: bao quanh (liên kết hình ảnh trong trường hợp này) của bạn
trong một divvớistyle="text-align:center"

<div style="text-align:center">

<a title="Example Image: Google Logo" href="https://www.google.com/" 
target="_blank" rel="noopener"><img src="https://www.google.com/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" alt="Google Logo. Click to visit Google.com" border="0" data-recalc-dims="1" /></a>

<h6><strong>This text will also be centered </strong></h6>

</div> /* ends centering style */

0
##Both Vertically and Horizontally center of the Page
.box{
    width: 300px;
    height: 300px;
    background-color: #232532;
    position: fixed;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    margin: auto;
}

5
Chào mừng bạn đến với stackoverflow! Vui lòng thêm một số lời giải thích cho câu trả lời của bạn.
Maximilian Peters

Nếu chúng tôi muốn sửa lỗi cụ thể <div> hoặc <section>Cả trung tâm theo chiều dọc và ngang của Trang cho tất cả các thiết bị, chỉ cần bạn có thể sử dụng mã kiểu này !!!!
Siva Kaliyamoorthy

Có vẻ như câu trả lời này thuộc về một câu hỏi khác :)
Manoj Kumar

0

Vâng, mã như thế này hoạt động tốt

<div>
 <img>
</div>

nhưng chỉ để nhắc nhở bạn, phong cách cho hình ảnh

object-fit : *depend on u*

vì vậy mã cuối cùng giống như ví dụ

<div style="border: 1px solid red;">
    <img
      src="./assets/images/truck-toy.jpg"
      alt=""
      srcset=""
      style="
       border-radius: 50%;
       height: 7.5rem;
       width: 7.5rem;
       object-fit: contain;"
    />
</div>

Kết quả cuối cùng


0

Sử dụng thuộc tính flex trên container là câu trả lời đúng cho việc có thể định tâm cả theo chiều dọc và chiều ngang.

Câu trả lời hàng đầu ở đây KHÔNG hoạt động để định tâm một mục theo chiều dọc, chỉ theo chiều ngang.


OP rõ ràng yêu cầu căn chỉnh ngang.
Alvin Moyo

-1
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">


      <style>
      body{
  /*-------------------important for fluid images---\/--*/
  overflow-x: hidden; /* some browsers shows it for mysterious reasons to me*/
  overflow-y: scroll;
  margin-left:0px;
  margin-top:0px;
  /*-------------------important for fluid images---/\--*/
      }
      .thirddiv{
      float:left;
      width:100vw;
      height:100vh;
      margin:0px;
      background:olive;
      }
      .thirdclassclassone{
      float:left;   /*important*/
      background:grey;
      width:80vw;
      height:80vh; /*match with img height bellow*/
      margin-left:10vw; /* 100vw minus "width"/2    */
      margin-right:10vw; /* 100vw minus "width"/2   */
      margin-top:10vh;
      }
      .thirdclassclassone img{
      position:relative; /*important*/
     display: block;  /*important*/
    margin-left: auto;  /*very important*/
    margin-right: auto;  /*very important*/
    height:80vh; /*match with parent div above*/

    /*--------------------------------
    margin-top:5vh;
    margin-bottom:5vh;
    ---------------------------------*/
    /*---------------------set margins to match total  height of parent di----------------------------------------*/
      }
    </style>           
</head>  
<body>
    <div class="thirddiv">
       <div class="thirdclassclassone">
       <img src="ireland.png">
    </div>      
</body>
</html>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.