
Вертикальное выравнивание изображения в CSS часто вызывает трудности, так как разные методы дают различный результат в зависимости от структуры разметки и свойств контейнера. Простейшие способы, вроде vertical-align, работают только внутри строчных или табличных элементов, а при использовании современных макетов на Flexbox или Grid нужны другие решения.
Оптимальный вариант зависит от того, в каком окружении находится картинка. Для контейнеров с фиксированной высотой чаще всего применяют display: flex с комбинацией align-items: center. При адаптивных макетах, где размеры блока не заданы жёстко, эффективнее использовать Grid или позиционирование с помощью transform: translateY(-50%).
Если требуется поддержка старых браузеров или специфичных условий вёрстки, можно комбинировать несколько методов. Например, использовать line-height при известной высоте строки или абсолютное позиционирование внутри относительно спозиционированного контейнера. Каждый приём имеет свои ограничения, поэтому важно подбирать способ исходя из конкретной задачи.
Выровнять изображение с помощью flexbox
Flexbox позволяет разместить изображение точно по центру контейнера без использования дополнительных отступов. Для этого родительскому блоку задаётся свойство display: flex;.
Чтобы выровнять изображение по вертикали, применяется align-items: center;. Если требуется одновременное горизонтальное центрирование, добавляется justify-content: center;.
Пример кода:
.container {
display: flex;
align-items: center;
justify-content: center;
height: 300px;
}
Значение height обязательно, иначе браузер не сможет определить точку вертикального выравнивания. Контейнер можно ограничить фиксированной высотой или использовать относительные единицы (vh), если изображение нужно центрировать относительно всей страницы.
Использование grid для вертикального центрирования
Grid-контейнер позволяет добиться точного вертикального центрирования без дополнительных оберток. Достаточно задать элементу-контейнеру свойство display: grid; и применить place-items: center;. Это сочетание автоматически располагает содержимое и по горизонтали, и по вертикали.
Если требуется выравнивание только по вертикали, используйте align-items: center;, сохраняя при этом произвольное горизонтальное позиционирование. Такой подход удобен для блоков с текстом и изображением, когда ширина содержимого не фиксирована.
При работе с вложенными элементами grid обеспечивает одинаковое поведение в разных браузерах, в отличие от line-height или vertical-align, которые зависят от контекста. Для сложных макетов можно комбинировать вертикальное центрирование с настройкой колонок и рядов, контролируя размеры через fr или minmax().
Центрирование изображения через позиционирование и transform
Для точного вертикального выравнивания применяется абсолютное позиционирование вместе с transform. Родительский блок должен иметь position: relative, чтобы элемент ориентировался именно по его границам.
Пример базовой разметки:
<div class="wrapper">
<div class="picture"></div>
</div>
CSS-настройки:
.wrapper {
position: relative;
height: 400px;
}
.picture {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
Особенности метода:
| Приём | Назначение |
|---|---|
| top: 50% | Смещает верхнюю границу блока к середине контейнера |
| left: 50% | Размещает левую границу в центре |
| transform: translate(-50%, -50%) | Сдвигает элемент на половину его ширины и высоты, обеспечивая точное центрирование |
Метод надёжно работает при неизвестных размерах изображения и сохраняет пропорции при изменении размеров родителя.
Выравнивание изображения с помощью line-height

Метод основан на том, что свойство line-height задаёт высоту строки, внутри которой находится изображение. Если высота строки равна высоте контейнера, изображение можно расположить по центру вертикали.
Пример:
.wrapper {
height: 200px;
line-height: 200px;
text-align: center;
}
.wrapper img {
vertical-align: middle;
}
Ключевым моментом является использование vertical-align: middle. Без этого параметра картинка останется у базовой линии текста и не будет центрироваться. Такой приём особенно полезен в блоках фиксированной высоты, где не требуется адаптивное поведение.
Недостаток метода: при увеличении количества строк текста внутри контейнера центрирование нарушается, так как расчёт завязан на совпадение line-height и height. Поэтому его применяют только в простых случаях, когда внутри блока присутствует одно изображение или один элемент.
Использование таблиц и display: table-cell
Для вертикального центрирования можно применить поведение таблицы: родительскому контейнеру задаётся display: table, а вложенному элементу – display: table-cell и свойство vertical-align: middle. Такой подход поддерживается даже в старых браузерах и не требует дополнительных обёрток.
Пример разметки:
<div class="wrapper">
<div class="content">
Центрируемый элемент
</div>
</div>
CSS-настройки:
.wrapper {
display: table;
height: 300px;
width: 100%;
}
.content {
display: table-cell;
vertical-align: middle;
text-align: center;
}
Метод эффективен для блоков фиксированной или процентной высоты. При этом элемент остаётся гибким: текст или другие вложенные блоки будут выравниваться строго по центру независимо от их размера.
Центрирование внутри блока фиксированной высоты

Для точного вертикального центрирования изображения внутри блока с фиксированной высотой важно учитывать несколько подходов, оптимальных для разных ситуаций.
- Flexbox:
Самый надёжный способ при современных браузерах.
- Установите контейнеру
display: flex;. - Используйте
align-items: center;для вертикального центрирования. - Если нужно и горизонтальное центрирование, добавьте
justify-content: center;. - Пример CSS:
height: 300px; display: flex; align-items: center; justify-content: center;
- Установите контейнеру
- Grid:
Подходит для сложных макетов с несколькими элементами.
- Контейнер:
display: grid;. - Вертикальное центрирование через
align-items: center;, горизонтальное –justify-items: center;. - Пример:
height: 300px; display: grid; align-items: center; justify-items: center;
- Контейнер:
- Позиционирование с трансформацией:
Работает в старых браузерах, когда flex и grid недоступны.
- Контейнер:
position: relative; height: 300px; - Изображение:
position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); - Обеспечивает точное центрирование независимо от размеров изображения.
- Контейнер:
Рекомендации по выбору метода:
- Flexbox предпочтителен для большинства одноосевых блоков.
- Grid удобен для сложных макетов с несколькими выравниваемыми объектами.
- Позиционирование с трансформацией сохраняется для поддержки устаревших браузеров.
- Для блоков фиксированной высоты важно задавать явную высоту через
heightилиmin-height.
Вопрос-ответ:
Как сделать так, чтобы изображение оставалось по центру при изменении размера блока?
Если использовать Flexbox или Grid, изображение автоматически останется по центру при изменении размеров контейнера. В случае с абсолютным позиционированием также сработает top: 50%; transform: translateY(-50%);, потому что смещение рассчитывается относительно текущей высоты контейнера. Таким образом, независимо от изменения размеров блока, картинка всегда будет вертикально посередине.
Есть ли разница между выравниванием inline-изображения и блочного элемента?
Да, есть. Inline-изображения по умолчанию выравниваются по базовой линии текста, поэтому вертикальное центрирование через vertical-align может быть нестабильным. Для надежного результата лучше сделать изображение блочным элементом (display: block;) и применить один из способов центрирования через Flexbox, Grid или абсолютное позиционирование. Это позволит избежать сдвигов из-за текста или других inline-элементов рядом.
