Hình ảnh trung tâm sử dụng văn bản trung tâm căn chỉnh?


Câu trả lời:


1087

Điều đó sẽ không hoạt động vì thuộc text-aligntính áp dụng cho các container khối, không phải các phần tử nội tuyến và imglà một phần tử nội tuyến. Xem thông số kỹ thuật của W3C .

Sử dụng cái này thay thế:

img.center {
    display: block;
    margin: 0 auto;
}
<div style="border: 1px solid black;">
<img class="center" src ="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>


5
tôi đã thử phương pháp này và nó hoạt động! Nhưng khi tôi thử 2 hình ảnh, nó không hoạt động, nó chỉ xếp chồng lên nhau như một vật tổ, có ý tưởng nào để sắp xếp 2 hình ảnh trên cùng một đường thẳng ở giữa không?
PatrickGamboa

1
Làm thế nào nó không được hỗ trợ bởi W3C? Bạn có thể cung cấp với các liên kết để trở lại yêu cầu đó?
Madara's Ghost

1
@SecondRikudo: text-aligndành cho định tâm văn bản, như tên ngụ ý. Đối với các yếu tố khối, margin: 0 auto;là cách tiếp cận được đề nghị .
Mrchief

4
@Mrchief Hình ảnh là các yếu tố nội tuyến, không phải khối. text-aligncũng hoạt động tốt trên chúng.
Madara's Ghost

4
Đó là lời giải thích kỳ lạ phải không? Bạn nói 'căn chỉnh văn bản' áp dụng cho các khối và không phải nội tuyến, mà tôi tin, sau đó bạn thực sự thay đổi nó thành một thành phần khối nhưng tránh sử dụng căn chỉnh văn bản. Ý tôi là mã của bạn hoạt động, nhưng đoạn đó cần phải được sắp xếp lại hoàn toàn, imo.
Bạch tuộc

118

Điều đó không phải lúc nào cũng hoạt động ... nếu không, hãy thử:

img {
    display: block;
    margin: 0 auto;
}

87

Tôi đã xem qua bài đăng này , và nó đã làm việc cho tôi:

img {
  position: absolute;
  top: 0;
  bottom: 0;
  left: 0;
  right: 0;
  margin: auto;
}
<div style="border: 1px solid black; position:relative; min-height: 200px">
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a">

</div>

(Căn dọc và ngang)


48

Một cách khác để làm điều đó sẽ tập trung vào một đoạn kèm theo:

<p style="text-align:center; border:1px solid black"><img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a"></p>


19
Tôi sẽ không đồng ý, tôi nghĩ rằng điều này không trả lời câu hỏi. OP đã hỏi liệu tài sản text-align: centercó phải là một cách tốt để căn giữa hình ảnh hay khôngkhông chỉ định rằng tài sản đó phải là một phần của thẻ img. Câu trả lời này sử dụng tài sản trong câu hỏi trong một nỗ lực để cung cấp một giải pháp (mà không hoạt động).
MandM

2
Điều này làm việc cho tôi khi hiển thị: khối, vv sẽ không.
matthewsheet

14

Bạn có thể làm:

<center><img src="..." /></center>


9
Thật không may, <center>không được hỗ trợ trong html5, nhưng chết tiệt, nó hoạt động.
Ayrat

13

Trên thực tế, vấn đề duy nhất với mã của bạn là text-alignthuộc tính áp dụng cho văn bản (có, hình ảnh được tính là văn bản) bên trong thẻ. Bạn sẽ muốn đặt một spanthẻ xung quanh hình ảnh và đặt kiểu của nó thành text-align: center, như vậy:

span.centerImage {
     text-align: center;
}
<span class="centerImage"><img src="http://placehold.it/60/60" /></span>

Hình ảnh sẽ được căn giữa. Để trả lời câu hỏi của bạn, đây là cách dễ nhất và dễ hiểu nhất để căn giữa hình ảnh, miễn là bạn nhớ áp dụng quy tắc cho hình ảnh chứa span(hoặc div).


2
Một spanphần tử display: inline;theo mặc định, vì vậy điều này gặp vấn đề tương tự như đặt text-align: center;trên imgchính nó. Bạn phải thiết lập spanđể display: block;hoặc thay thế nó bằng một divcho điều này để làm việc.
Web_Designer

10

Có ba phương pháp để căn giữa một yếu tố mà tôi có thể đề xuất:

  1. Sử dụng text-aligntài sản

        .parent {
        text-align: center;
    }
        <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>

  2. Sử dụng margintài sản

    img {
        display: block;
        margin: 0 auto;
    }
    <img src="https://placehold.it/60/60" />

  3. Sử dụng positiontài sản

    img {
        display: block;
        position: relative;
        left: -50%;
    }
    .parent {
        position: absolute;
        left: 50%;
    }
    <div class="parent">
        <img src="https://placehold.it/60/60" />
    </div>


Phương thức thứ nhất và thứ hai chỉ hoạt động nếu cha mẹ ít nhất rộng bằng hình ảnh. Khi hình ảnh rộng hơn cha mẹ của nó, hình ảnh sẽ không ở giữa !!!

Nhưng: Phương pháp thứ ba là một cách tốt cho điều đó!

Đây là một ví dụ:

img {
    display: block;
    position: relative;
    left: -50%;
}
.parent {
    position: absolute;
    left: 50%;
}
<div class="parent">
    <img src="http://imgsv.imaging.nikon.com/lineup/lens/zoom/normalzoom/af-s_dx_18-140mmf_35-56g_ed_vr/img/sample/img_01.jpg" />
</div>


# 3 chính xác đến mức tôi đã có thể tập trung imgvào bên trong một cách hợp lý divbằng cách WebViewtiêm CSS. Cảm ơn bạn!
JorgeAmVF

8

Chỉ khi bạn cần hỗ trợ các phiên bản Internet Explorer cổ.

Cách tiếp cận hiện đại là làm margin: 0 autotrong CSS của bạn.

Ví dụ ở đây: http://jsfiddle.net/bKRMY/

HTML:

<p>Hello the following image is centered</p>
<p class="pic"><img src="https://twimg0-a.akamaihd.net/profile_images/440228301/StackoverflowLogo_reasonably_small.png"/></p>
<p>Did it work?</p>

CSS:

p.pic {
    width: 48px;
    margin: 0 auto;
}

Vấn đề duy nhất ở đây là chiều rộng của đoạn phải giống với chiều rộng của hình ảnh . Nếu bạn không đặt chiều rộng cho đoạn văn, nó sẽ không hoạt động, bởi vì nó sẽ giả định 100% và hình ảnh của bạn sẽ được căn trái, trừ khi bạn sử dụng text-align:center.

Hãy thử Fiddle và thử nghiệm với nó nếu bạn muốn.


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

1
Dream hunter, nếu bạn đang đề xuất một cách khác để định tâm hình ảnh bằng css, thì bạn cần mở rộng câu hỏi của mình một chút. Bạn có thể giải thích cách thức và lý do giải pháp thay thế được đề xuất này sẽ là cách tốt hơn để đạt được mục tiêu của người hỏi, có lẽ bao gồm một liên kết đến tài liệu liên quan. Điều đó sẽ làm cho nó hữu ích hơn đối với họ và cũng hữu ích hơn đối với những người đọc trang web khác đang tìm giải pháp cho các vấn đề tương tự.
Vince Bowdren

6

Nếu bạn đang sử dụng một lớp với một hình ảnh thì sau đây sẽ làm

class {
    display: block;
    margin: 0 auto;
}

Nếu nó chỉ là một hình ảnh trong một lớp cụ thể mà bạn muốn căn giữa, thì sau đây sẽ làm:

class img {
    display: block;
    margin: 0 auto;
}

Tôi cũng sẽ thay đổi cái dưới cùng img.classhoặc thêm một img.classphiên bản. Thx cho điều này.
Chuck Savage

6

Trên hộp chứa hình ảnh, bạn có thể sử dụng CSS 3 Flexbox để căn giữa hình ảnh một cách hoàn hảo, cả theo chiều dọc và chiều ngang.

Giả sử bạn có <div class = "container"> làm chủ sở hữu hình ảnh:

Sau đó, như CSS bạn phải sử dụng:

.container {
    display: flex;
    align-items: center;
    justify-content: center;
    height: 100%;
}

Và điều này sẽ làm cho tất cả nội dung của bạn bên trong div này hoàn toàn tập trung.


whate trong nội dung justify có thể sử dụng để đặt căn chỉnh trong <p> ??
Manjitha teshara

Đây là những gì tôi muốn. Cảm ơn bạn.
Dionne Kim

5

Giải pháp đơn giản nhất tôi tìm thấy là thêm phần tử này vào phần tử img của mình:

style="display:block;margin:auto;"

Có vẻ như tôi không cần thêm "0" trước "tự động" theo đề xuất của người khác. Có lẽ đó là cách thích hợp, nhưng nó hoạt động đủ tốt cho mục đích của tôi mà không có "0". Ít nhất là trên Firefox, Chrome và Edge mới nhất .


chỉ có nghĩa là tự động auto auto auto auto0 autocó nghĩa là 0 auto 0 auto... và theo mặc định, tự động cho lề dưới và trên cùng là 0vì vậy việc thêm 0 hay không hoàn toàn giống nhau trong trường hợp này khiến bạn trả lời một bản sao thứ n của những cái đã được cung cấp
Temani Afif

Nhận xét của bạn giải thích lý do tại sao nó hoạt động. Tuyệt quá. Nhưng câu trả lời nào trước đây cho biết 'tự động' không có '0' hoạt động tốt? Có phải thực tế đó không đáng nói?
Panu Logic

trong trường hợp này nên là một nhận xét, bởi vì trong trường hợp cụ thể này cả hai đều giống nhau. Tôi không nghĩ rằng chúng ta nên có một câu trả lời cho tất cả các giá trị tương đương, trong trường hợp này chúng ta có thể viết: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, và vân vân ... bạn nghĩ mỗi người xứng đáng một câu trả lời khác nhau? Tôi không nghĩ vậy.
Temani Afif

Tôi sẽ không nói rằng nếu hai phân đoạn CSS khác nhau tạo ra cùng một kết quả cuối cùng thì hai phân đoạn CSS đó "giống nhau". Đầu ra của chúng là như nhau nhưng mã nguồn của chúng không giống nhau. Giống như nói chung, bạn có thể viết bất kỳ số lượng chương trình khác nhau tạo ra cùng một đầu ra. Sau đó, rất có giá trị để biết (và nói với những người hỏi) những chương trình "tương đương" như vậy dường như là đơn giản nhất và ngắn nhất để viết.
Panu Logic

và tất cả điều này nên được viết trong một câu trả lời. Đó là lý do tại sao câu trả lời này phù hợp như một nhận xét hơn là một câu trả lời hoàn toàn mới. Chúng ta nên trình bày tất cả những thứ tương đương với nhau và không biến chúng thành tính năng riêng biệt có vẻ như chúng hoàn toàn khác nhau vì không phải là trường hợp [ý kiến ​​của tôi btw, không cần phải đồng ý với nó hoặc tranh luận ngược lại]. Và tôi không nói về các chương trình khác nhau tạo ra cùng một đầu ra, đó là một điều hoàn toàn khác vì logic có thể không giống nhau. Ở đây chúng ta đang nói về cùng một tài sản và cùng một giá trị (giống i++như i+=1)
Temani Afif

4

Đơn giản chỉ cần thay đổi căn chỉnh cha mẹ :)

Hãy thử cái này trên thuộc tính cha mẹ:

text-align:center

3

Bạn có thể sử dụng text-align: centertrên cha mẹ và thay đổi imgthành display: inline-block→ do đó nó hoạt động giống như một thành phần văn bản và sẽ được căn giữa nếu cha mẹ có chiều rộng!

img {
    display: inline-block
}

2

Tôi sẽ sử dụng một div để căn giữa một hình ảnh. Như trong:

<div align="center"><img src="your_image_source"/></div>

2

Nếu bạn muốn đặt hình ảnh làm nền, tôi đã có một giải pháp:

.image {
    background-image: url(yourimage.jpg);
    background-position: center;
}

2

Để căn giữa một hình ảnh không nền phụ thuộc vào việc bạn muốn hiển thị hình ảnh dưới dạng nội tuyến (hành vi mặc định) hoặc thành phần khối.

Trường hợp nội tuyến

Nếu bạn muốn giữ hành vi mặc định của thuộc tính CSS hiển thị của hình ảnh, bạn sẽ cần phải bọc hình ảnh của mình bên trong một thành phần khối khác mà bạn phải đặt text-align: center;

Trường hợp của khối

Nếu bạn muốn coi hình ảnh là một thành phần khối của riêng mình, thì thuộc text-aligntính không có ý nghĩa và thay vào đó bạn nên làm điều này:

IMG.display {
    display: block;
    margin-left: auto;
    margin-right: auto;
}

Câu trả lời cho câu hỏi của bạn:

Là thuộc tính văn bản-align: centre; một cách tốt để tập trung hình ảnh bằng CSS?

Có và không.

  • Có, nếu hình ảnh là thành phần duy nhất bên trong trình bao bọc của nó.
  • Không, trong trường hợp bạn có các yếu tố khác trong trình bao bọc của hình ảnh vì tất cả các thành phần con là anh chị em của hình ảnh sẽ thừa hưởng thuộc text-aligntính: và có thể bạn sẽ không thích hiệu ứng phụ này.

Người giới thiệu

  1. Danh sách các yếu tố nội tuyến
  2. Điều trung tâm

1

Một cách nữa để chia tỷ lệ - hiển thị nó:

img {
  width: 60%; /* Or required size of image. */
  margin-left: 20% /* Or scale it to move image. */
  margin-right: 20% /* It doesn't matters much if using left and width */
}

1

Sử dụng điều này cho imgCSS của bạn :

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

0

display: blockvới tôi margin: 0đã không làm việc, không bao bọc với một text-align: centeryếu tố.

Đây là giải pháp của tôi:

img.center {
    position: absolute;
    transform: translateX(-50%);
    left: 50%;
}

translateX được hầu hết các trình duyệt hỗ trợ


1
ý bạn là margin: 0 auto;sao Điều quan trọng là thiết lập margin-leftmargin-rightđể auto. margin: 0 auto;chỉ là một lối tắt cho điều đó.
Web_Designer

1
@Web_Designer tôi đã cố gắng margin: 0 auto, margin: 0margin: auto, không ai làm việc. Lưu ý rằng trong trình kiểm tra của Chrome, khi sử dụng margin: 0 auto, sẽ đánh vào tài sản bằng dấu chấm than invalid property value(hoặc bất cứ điều gì có nghĩa là như vậy)
OverCoder

Tôi nghĩ bạn có nghĩa là "vị trí: tuyệt đối;" thay vì "hiển thị: tuyệt đối;"
WebDevDaniel

Cảm ơn @WebDevDaniel đã chỉ ra lỗi đánh máy. Dù sao đi nữa, bạn có thể muốn sử dụng relativeđịnh vị hơn là absolute, cả hai đều hoạt động khá tốt.
OverCoder

0

Tôi phát hiện ra rằng nếu tôi có một hình ảnh và một số văn bản bên trong a div, thì tôi có thể sử dụng text-align:centerđể căn chỉnh văn bản và hình ảnh trong một cú nhấn.

HTML:

    <div class="picture-group">
        <h2 class="picture-title">Picture #1</h2>
        <img src="http://lorempixel.com/99/100/" alt="" class="picture-img" />
        <p class="picture-caption">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Temporibus sapiente fuga, quia?</p>
    </div>

CSS:

.picture-group {
  border: 1px solid black;
  width: 25%;
  float: left;
  height: 300px;
  #overflow:scroll;
  padding: 5px;
  text-align:center;
}

CodePen: https://codepen.io/artforlife/pen/MoBzrL?editors=1100


0

Đôi khi chúng tôi trực tiếp thêm nội dung và hình ảnh trên quản trị viên WordPress bên trong các trang. Khi chúng tôi chèn hình ảnh bên trong nội dung và muốn căn chỉnh trung tâm đó. Mã được hiển thị là:

 **<p><img src="https://abcxyz.com/demo/wp-content/uploads/2018/04/1.jpg" alt=""></p>**

Trong trường hợp đó, bạn có thể thêm nội dung CSS như thế này:

article p img{
    margin: 0 auto;
    display: block;
    text-align: center;
    float: none;
}

0

Sử dụng:

<dev class="col-sm-8" style="text-align: center;"><img src="{{URL('image/car-trouble-with-clipping-path.jpg')}}" ></dev>

Tôi nghĩ rằng đây là cách để tập trung vào một hình ảnh trong khung Laravel.


0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

điều này sẽ làm cho trung tâm hình ảnh theo cả chiều dọc và chiều ngang

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.