Центральне зображення за допомогою центру вирівнювання тексту?


510

Чи властивість text-align: center;є хорошим способом центрувати зображення за допомогою CSS?

img {
    text-align: center;
}

jsfiddle.net/j6q4d810/1 Це чудово працює з будь-якою шириною та висотою
gmarsi

Відповіді:


1086

Це не працюватиме, оскільки text-alignвластивість застосовується до блокових контейнерів, а не до вбудованих елементів та imgє вбудованим елементом. Див . Специфікацію W3C .

Використовуйте це замість:

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
Я спробував цей метод, і він працює! але коли я спробував 2 зображення, це не вийшло, воно просто укладається один на одного, як тотем, будь-які ідеї, як вирівняти 2 зображення на одній лінії посередині?
PatrickGamboa

1
Як це не підтримується W3C? Чи можете ви надати посилання на підтвердження цієї претензії?
Привид

1
@SecondRikudo: text-alignпризначений для центрування тексту, як випливає з назви. Для блокових елементів margin: 0 auto;- рекомендований підхід.
Mrchief

4
@Mrchief Зображення - це вбудовані елементи, а не блоки. text-alignпрацює так само добре на них.
Привид

4
Це пояснення є дивним, чи не так? Ви кажете, що "вирівнювання тексту" застосовується до блоків, а не до рядків, які я вважаю, тоді ви буквально змінюєте його на елемент блоку, але не використовуєте вирівнювання тексту. Я маю на увазі, що ваш код працює, але цей абзац потрібно повністю змінити, imo.
Восьминіг

117

Це не завжди працює ... якщо це не так, спробуйте:

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

87

Я наткнувся на цю посаду , і вона працювала на мене:

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>

(Вертикальне та горизонтальне вирівнювання)


48

Ще один спосіб зробити це - центрування додаючого абзацу:

<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
Я б не погоджувався, я думаю, що це відповідає на питання. ОП запитав, чи властивість text-align: centerє хорошим способом центрування зображення, і не вказав, що властивість має бути частиною тегу img. Ця відповідь використовує відповідну властивість, намагаючись надати рішення (що працює).
MandM

2
Це працювало для мене, коли display: block тощо не буде.
matthewsheets


13

Насправді єдина проблема з вашим кодом полягає в тому, що text-alignатрибут стосується тексту (так, зображення вважаються текстом) всередині тегу. Ви хочете поставити spanтег навколо зображення і встановити його стиль text-align: centerтак:

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

Зображення буде по центру. Відповідаючи на ваше запитання, це найпростіший і найбезпечніший спосіб центрувати зображення, якщо ви пам’ятаєте застосувати правило до зображення, яке містить span(або div).


2
spanЕлемент display: inline;за замовчуванням, так що це біжить в ту ж проблему , як розміщення text-align: center;на imgсебе. Ви повинні встановити , spanщоб display: block;або замінити його divна цю роботу.
Web_Designer

10

Я можу запропонувати три методи центрування елемента:

  1. Використання text-alignвластивості

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

  2. Використання marginвластивості

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

  3. Використання positionвластивості

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


Перший і другий методи працюють лише в тому випадку, якщо батьківський принаймні такий же широкий, як зображення. Коли зображення ширше за батьківський, зображення не залишиться в центрі !!!

Але: Третій спосіб - хороший спосіб для цього!

Ось приклад:

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 настільки точний , що я був в стані відцентрувати imgвсередині виправданою divв WebViewс ін'єкцією CSS. Дякую!
JorgeAmVF

8

Тільки якщо вам потрібно підтримувати старовинні версії Internet Explorer.

Сучасний підхід - це робити margin: 0 autoу вашому CSS.

Приклад тут: 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;
}

Єдине питання тут полягає в тому, що ширина абзацу повинна бути такою ж, як і ширина зображення . Якщо ви не покладете ширину на абзац, він не працюватиме, оскільки він набере 100%, а ваше зображення вирівняється ліворуч, якщо, звичайно, ви не використовуєтеtext-align:center .

Спробуйте загадку і експериментуйте з нею, якщо вам подобається.


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

1
мисливець мрій, якщо ви пропонуєте альтернативний спосіб центрування зображення за допомогою css, то вам слід трохи розширити своє запитання. Ви можете пояснити, як і чому ця запропонована альтернатива була б кращим способом досягнення мети запитувача, можливо, включаючи посилання на відповідну документацію. Це зробило б їх більш корисним, а також кориснішим для інших читачів сайтів, які шукають рішення подібних проблем.
Вінс Боудрен

6

Якщо ви використовуєте клас із зображенням, то зробимо наступне

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

Якщо ви хочете в центрі вирівнювати лише зображення у певному класі, виконайте наступне:

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

Я б змінив нижній, щоб бути, img.classабо додати img.classверсію теж. Thx для цього.
Чак Савідж

6

На зображенні, що містить контейнер, ви можете використовувати CSS 3 Flexbox, щоб ідеально центрувати зображення всередині, як вертикально, так і горизонтально.

Припустимо, у вас є <div class = "container"> як власник зображення:

Тоді як CSS ви повинні використовувати:

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

І це зробить весь ваш вміст у цій диві ідеально центрованою.


whate у виправданому вмісті може використовувати для вирівнювання набору в <p> ??
Манджіта тешара

Це я хотів. Дякую.
Кім

5

Найпростіше рішення, яке я знайшов, було додати це до свого елемента img:

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

Здається, мені не потрібно додавати "0" перед "авто", як пропонують інші. Можливо, це правильний шлях, але він працює досить добре для моїх цілей і без "0". Принаймні, на останніх Firefox, Chrome та Edge .


лише автоматичне значення auto auto auto autoта 0 autoзасоби 0 auto 0 auto... а за замовчуванням auto для нижнього та верхнього поля 0так само додає 0 чи ні, в цьому випадку точно так само, що змушує вас відповісти на n-й дублікат із тих, що вже надані
Temani Afif

Ваш коментар пояснює, чому це працює. Чудово. Але в якій з попередніх відповідей також працює звичайне "авто" без "0"? Це факт не варто згадувати?
Panu Logic

в цьому випадку це має бути коментар, оскільки в цьому конкретному випадку обидва однакові. Я не думаю , що ми повинні мати відповідь для всіх еквівалентних значень, в цьому випадку ми можемо написати: auto, auto auto, auto auto auto, auto auto auto auto, 0 auto 0, 0 auto, 0 auto 0 auto, і так далі ... Ви думаєте , кожен з яких заслуговує іншої відповіді? Я не думаю, що так.
Темані Афіф

Я б не сказав, що якщо два різних сегмента CSS дають однаковий кінцевий результат, ці два CSS-сегменти "однакові". Їх вихід однаковий, але їх вихідний код не той самий. Як і в цілому, ви можете написати будь-яку кількість різних програм, які дають однаковий вихід. Тоді важливо знати (і розповідати людям, які запитують), яка з таких «еквівалентних» програм видається найпростішою і найкоротшою для написання.
Panu Logic

і все це має бути записано в межах однієї відповіді. Ось чому ця відповідь більше підходить як коментар, ніж цілком нова відповідь. Ми повинні представляти всі еквівалентні речі разом, а не робити їх окремими ознаками, що може здатися, що вони зовсім інші, тому що це не так [моя думка btw, не потрібно з цим погоджуватися або твердити протилежне]. І я не кажу про різні програми, які дають однаковий вихід, це зовсім інша річ, оскільки логіка може бути не однаковою. Тут ми говоримо про ту саму властивість і ту саму цінність (як i++і те саме i+=1)
Temani Afif

4

Просто змініть батьківське вирівнювання :)

Спробуйте це на батьківських властивостях:

text-align:center

3

Ви можете використовувати text-align: centerдля батьків і змінити imgна display: inline-block→, тому він поводиться як текстовий елемент і буде по центру, якщо батько має ширину!

img {
    display: inline-block
}

2

Я б використав div, щоб вирівняти зображення по центру. Як і в:

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

2

Якщо ви хочете встановити зображення як фон, у мене є рішення:

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

2

До центрування фонового зображення залежить від того, чи хочете ви відображати зображення як вбудований (поведінка за замовчуванням) або блок-елемент.

Корпус накладки

Якщо ви хочете зберегти поведінку за замовчуванням властивості відображуваного CSS зображення за замовчуванням, вам потрібно буде обгорнути зображення всередині іншого елемента блоку, на який потрібно встановити text-align: center;

Корпус блоку

Якщо ви хочете розглядати зображення як власний блок-елемент, то text-alignвластивість не має сенсу, і вам слід зробити це замість цього:

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

Відповідь на ваше запитання:

Чи вирівнюється текст властивості: центр; хороший спосіб центрувати зображення за допомогою CSS?

Так і ні.

  • Так, якщо зображення є єдиним елементом всередині його обгортки.
  • Ні, якщо ви маєте інші елементи всередині обгортки зображення, тому що всі дочірні елементи, які є побратимами зображення, успадкують text-alignвластивість: і, можливо, вам не сподобається цей побічний ефект.

Список літератури

  1. Список вбудованих елементів
  2. Центрирування речей

1

Ще один спосіб масштабування - відобразити його:

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

Використовуйте це для свого imgCSS:

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

0

display: blockз margin: 0не працювали для мене, ні обгортання text-align: centerелементом.

Це моє рішення:

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

translateX підтримується більшістю браузерів


1
ти мав на увазі margin: 0 auto;? Ключ налаштування margin-leftі margin-rightдо auto. margin: 0 auto;це лише ярлик для цього.
Web_Designer

1
@Web_Designer Я намагався margin: 0 auto, margin: 0і margin: auto, жоден не працював. Зауважте, що інспектор Chrome під час використання margin: 0 autoвражає властивість знаком оклику invalid property value(або що там це означає)
OverCoder

Я думаю, ви мали на увазі "позиція: абсолютна"; замість "показ: абсолютний;"
WebDevDaniel

Дякуємо @WebDevDaniel за вказівку на друкарські помилки. О будь-який, до речі, ви можете скористатися relativeпозиціонуванням, а не тим absolute, що обидва працюють досить добре.
OverCoder

0

Я виявив, що якщо у мене є зображення та текст у тексті a div, я можу використовувати text-align:centerвирівнювання тексту та зображення одним махом.

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

Іноді ми безпосередньо додаємо вміст і зображення адміністратору WordPress всередині сторінок. Коли ми вставляємо зображення всередині вмісту і хочемо вирівняти цей центр. Код відображається як:

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

У цьому випадку ви можете додати такий вміст CSS:

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

0

Використання:

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

Я думаю, що це спосіб центрувати зображення в рамках Laravel.


0
.img-container {
  display: flex;
}

img {
  margin: auto;
}

це зробить центр зображення як вертикально, так і горизонтально

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.