Загрузка...
Загрузка...
Полное руководство по центрированию элементов с помощью CSS Flexbox: по горизонтали, вертикали, по обеим осям, а также центрирование с учётом отступов.
Подробное руководство по CSS Flexbox: свойства контейнера и элементов, оси, выравнивание, практические примеры и типичные паттерны вёрстки.
CSS & ДизайнСравнение Flexbox и CSS Grid: сильные стороны каждой технологии, типичные сценарии использования и рекомендации по выбору для разных задач вёрстки.
CSS & ДизайнПодробное руководство по CSS Grid: свойства контейнера и элементов, именованные области, авторазмещение, практические примеры и типичные паттерны.
CSS & ДизайнПошаговое руководство по миграции проекта с обычного CSS на Tailwind: стратегии, инструменты, типичные замены и решение частых проблем.
Поделитесь с коллегами или изучите другие материалы блога
Центрирование элементов — одна из самых частых задач в веб-вёрстке. До появления Flexbox разработчики использовали margin: auto, position: absolute с transform, таблицы или хак с display: inline-block. Flexbox решает эти задачи проще и предсказуемее. В этой статье рассмотрены все основные паттерны центрирования с Flexbox.
Самый распространённый случай — центрирование одного или нескольких элементов по вертикали и горизонтали внутри контейнера:
.centered {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
}
justify-content: center — выравнивание по главной оси (по умолчанию горизонтали)align-items: center — выравнивание по поперечной оси (по умолчанию вертикали)Контейнер должен иметь фиксированную высоту (например, min-height: 100vh или height: 400px), иначе поперечная ось не будет иметь достаточной высоты для центрирования.
Для одномерного центрирования по горизонтали (ряд элементов):
.row-centered {
display: flex;
justify-content: center;
gap: 1rem;
}
Элементы выстраиваются в ряд и центрируются по главной оси. gap добавляет отступы между элементами.
Для центрирования по вертикали в одной строке:
.centered-vertically {
display: flex;
align-items: center;
min-height: 200px;
}
Все flex-элементы выравниваются по центру поперечной оси. Контейнер снова должен иметь фиксированную высоту.
Когда главная ось вертикальная (flex-direction: column), роли меняются:
justify-content: center — центрирование по вертикалиalign-items: center — центрирование по горизонтали.centered-column {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
}
При нескольких элементах они центрируются как группа:
.group-centered {
display: flex;
justify-content: center;
align-items: center;
gap: 1rem;
flex-wrap: wrap;
}
При flex-wrap: wrap при нехватке места элементы переносятся, но каждая строка остаётся центрированной.
Если контейнер имеет padding, центрирование учитывает его автоматически:
.centered-with-padding {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 2rem;
box-sizing: border-box;
}
Для переопределения выравнивания одного элемента внутри группы:
.container {
display: flex;
align-items: flex-start;
}
.centered-item {
align-self: center;
}
Flexbox выравнивает сами элементы, но не текст внутри них. Для центрирования текста внутри flex-элемента используйте text-align: center:
.card {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
Или оберните текст в дополнительный блок и центрируйте его через Flexbox:
.card {
display: flex;
flex-direction: column;
align-items: center;
}
.card-content {
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
}
Когда один элемент должен занимать всё доступное пространство, а остальные — оставаться по центру:
.header {
display: flex;
align-items: center;
gap: 1rem;
}
.header-left {
flex: 1;
text-align: left;
}
.header-center {
flex: 0 0 auto;
}
.header-right {
flex: 1;
text-align: right;
}
Центральный элемент не растёт, боковые занимают равное пространство.
Типичный паттерн для модалки — центрирование по экрану:
.modal-overlay {
display: flex;
justify-content: center;
align-items: center;
position: fixed;
inset: 0;
background: rgba(0, 0, 0, 0.5);
}
.modal {
max-width: 90vw;
max-height: 90vh;
overflow: auto;
}
Если контент может быть выше viewport, используйте min-height и overflow:
.scrollable-centered {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
padding: 2rem;
box-sizing: border-box;
}
.scrollable-centered > * {
max-width: 100%;
}
При переполнении содержимое прокручивается, но остаётся центрированным по возможности.
При нескольких строках (flex-wrap: wrap) и необходимости центрировать группы строк по вертикали:
.multi-row-centered {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-content: center;
gap: 1rem;
min-height: 100vh;
}
align-content: center центрирует все строки как блок по поперечной оси.
Для быстрой проверки и отладки центрирования используйте Flexbox Playground на rechecker.ru. Инструмент позволяет менять justify-content, align-items, flex-direction и сразу видеть результат.
| Метод | Горизонталь | Вертикаль | Обе оси | Комментарий |
|---|---|---|---|---|
| Flexbox | justify-content: center | align-items: center | Оба | Рекомендуемый способ |
| Grid | place-items: center | — | — | Один контейнер |
| margin: auto | Да (блок) | Нет | Нет | Только горизонталь для блочных элементов |
| position + transform | Да | Да | Да | Работает, но требует position |
Забытая высота контейнера — без min-height или height у контейнера вертикальное центрирование не работает, так как поперечная ось не имеет размера.
Путаница осей при column — при flex-direction: column главная ось вертикальная, justify-content управляет вертикальным выравниванием.
Центрирование текста — Flexbox центрирует элементы, а не текст. Для текста внутри элемента используйте text-align: center или вложенный flex-контейнер.
При direction: rtl или атрибуте dir="rtl" направление главной оси меняется. Центрирование остаётся корректным: justify-content: center и align-items: center работают с учётом направления.
.rtl-container {
direction: rtl;
display: flex;
justify-content: center;
align-items: center;
}
Для центрирования квадратного или прямоугольного контента с сохранением пропорций:
.centered-square {
display: flex;
justify-content: center;
align-items: center;
aspect-ratio: 1;
max-width: 400px;
max-height: 400px;
}
При центрировании модальных окон и overlay убедитесь, что фокус остаётся внутри модалки (focus trap) и что скринридеры корректно объявляют структуру. Flexbox не влияет на доступность напрямую, но центрированный контент должен быть правильно размечен (роли, aria-атрибуты).
Подробное руководство по всем свойствам Flexbox — в статье CSS Flexbox: полное руководство с примерами. Сравнение Flexbox и CSS Grid для разных случаев — в Flexbox vs CSS Grid: когда что использовать.
При flex-wrap: wrap и нескольких строках align-content: center центрирует все строки по вертикали:
.wrapped-centered {
display: flex;
flex-wrap: wrap;
justify-content: center;
align-content: center;
gap: 1rem;
min-height: 100vh;
}
На flex-элементе margin: auto поглощает свободное пространство. Для центрирования одного элемента в контейнере:
.centered-single {
display: flex;
min-height: 100vh;
}
.centered-single > * {
margin: auto;
}
gap не влияет на центрирование — он добавляет отступы между элементами. Центрирование задаётся justify-content и align-items.
Flexbox с justify-content: center и align-items: center поддерживается во всех современных браузерах. Для IE10–11 могут потребоваться префиксы -ms-.