Flexbox
Коротко
Модель раскладки CSS, которая выстраивает дочерние элементы в одну линию — строку или столбец — и распределяет между ними свободное место и выравнивание.
Что такое «Flexbox»
До Flexbox простые вещи давались вёрстке тяжело: поставить блоки в ряд одинаковой высоты, прижать кнопку к низу карточки, отцентрировать что-то по вертикали. Это решали плавающими блоками, таблицами и хаками вроде clearfix. Flexbox сделал такие задачи делом пары строк, и сейчас он работает во всех браузерах.
Включается модель свойством display: flex на контейнере. Его прямые потомки становятся flex-элементами и подчиняются правилам контейнера.
Оси и основные свойства
- Главная ось задаётся
flex-direction: строка (row, по умолчанию) или столбец (column). justify-contentраспределяет элементы вдоль главной оси: к началу, по центру, с равными промежутками.align-itemsвыравнивает по поперечной оси.align-items: centerрешает вечную задачу вертикального выравнивания.flex-wrap: wrapразрешает перенос на новую строку.gapзадаёт промежутки между элементами.flexу элемента — сокращение для роста, сжатия и базового размера.
Пример: шапка сайта
.header {
display: flex;
align-items: center;
gap: 16px;
}
.header__search {
flex: 1;
min-width: 0;
}
.header__phone {
margin-left: auto;
}
Логотип, поиск, телефон и корзина выстраиваются в ряд и выравниваются по центру по высоте. Поле поиска забирает всё свободное место, а margin-left: auto отталкивает телефон и всё, что за ним, к правому краю.
Частые сюрпризы
- Элемент не сжимается. По умолчанию flex-элемент не становится уже своего содержимого. Длинное слово или ссылка распирают карточку и ломают ряд. Лечится
min-width: 0у элемента, как в примере. - Свойство order путает порядок. Оно меняет только визуальную последовательность. Клавиатура и экранный диктор идут по коду, и фокус начинает прыгать.
- Сетка из flex. Карточки в последнем неполном ряду растягиваются шире остальных. Для раскладки по строкам и столбцам одновременно лучше подходит CSS Grid, а Flexbox оставить для рядов внутри компонентов.

