Быстрый ответ: text-align у родителя
<img> это строчный элемент: он стоит в строке текста как слово. Поэтому его центрируют так же, как текст, через text-align: center у родителя:
Стиль задается div, а не изображению. text-align: center у самого <img> ничего не делает, потому что внутри изображения нет текста, который можно выровнять.
Способ 2: display block и margin auto
Если хотите оформлять само изображение, превратите его в блок и задайте автоматические боковые отступы. Свободное пространство с двух сторон делится поровну:
У серого изображения есть margin: 0 auto, но оно остается в начале строки: auto-отступы не действуют на строчный элемент. Недостающая деталь это display: block. max-width: 100% вместе с height: auto не дает изображению вылезать за узкий экран и сохраняет его пропорции.
Способ 3: flexbox или grid, в том числе по вертикали
Чтобы выровнять изображение по центру в обоих направлениях внутри блока, задайте блоку высоту и центрируйте его содержимое через grid или flexbox:
Эквивалент на flexbox: display: flex; justify-content: center; align-items: center;. В обоих случаях блоку нужна высота больше, чем у изображения, иначе центрировать негде. Те же способы центрируют любой элемент; все они сравниваются на странице выравнивание div по центру.
Картинка с подписью по центру
Фотографии с подписью место в <figure>. Центрируйте содержимое figure, и изображение с подписью выстроятся вместе:
Несколько картинок в ряд по центру
Ряд логотипов или миниатюр это задача для flexbox. justify-content: center центрирует группу, gap задает промежутки, а flex-wrap позволяет переносить на маленьких экранах, сохраняя центрирование:
Какой способ выбрать
| Ситуация | Что использовать |
|---|---|
| Изображение в абзаце или простом блоке | text-align: center у родителя |
| Можно оформлять только изображение | display: block; margin: 0 auto; |
| По центру в обоих направлениях внутри блока | Grid place-items: center (или flexbox) у блока |
| Ряд изображений | Flexbox с justify-content: center |
| Изображение с подписью | <figure> с text-align: center |
| Фоновая картинка, а не содержимое | background-position: center, смотрите фоновое изображение |
Старые способы и почему не стоит
В старых учебниках их все еще можно встретить:
<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">
<center> и атрибут align удалены из HTML. Браузеры все еще отображают <center> ради обратной совместимости, а align="center" у изображения даже не центрирует его по горизонтали: браузеры воспринимают это как вертикальное выравнивание в строке. Используйте один из способов CSS выше.
Частые ошибки
text-align: centerу<img>. Задайте его родителю.margin: 0 autoу строчного изображения. Добавьтеdisplay: block.- Вертикальное центрирование без высоты у родителя. Блок сжимается до изображения, и центрировать негде.
float: center. Такого значения нет. Float прижимает только к стороне.- Забытый
alt. Изображению по центру все равно нужен альтернативный текст;alt=""только для чисто декоративных изображений. - Растянутое изображение. Если задать в CSS и
width, иheightс другим соотношением, оно искажается. Задайте одно из них иheight: autoили добавьтеobject-fit: cover.
Часто задаваемые вопросы
Как выровнять картинку по центру в HTML?
Задайте text-align: center элементу, который ее содержит, например <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. Изображение по умолчанию строчное, поэтому центрируется как слово в тексте.
Как выровнять картинку по центру через margin auto?
Сначала сделайте изображение блоком: img { display: block; margin: 0 auto; }. Auto-отступы не центрируют строчные элементы, а изображение строчное, пока вы это не измените.
Как выровнять картинку по центру по вертикали и горизонтали?
Сделайте контейнер сеткой (или flexbox) с высотой: .box { display: grid; place-items: center; height: 300px; }. Изображение окажется посередине блока.
Можно ли центрировать картинку тегом <center> или align="center"?
Нет. <center> и атрибут align у <img> в HTML5 устарели. Браузеры все еще отображают <center> для старых страниц, но align="center" у изображения выравнивает его по вертикали в строке, а не по горизонтали. Используйте CSS.
Почему под картинкой по центру небольшой зазор?
Строчное изображение стоит на базовой линии текста, и под ним остается место для выносных элементов букв. Задайте изображению display: block или vertical-align: middle, и зазор исчезнет.