Главная и поперечная оси
В Flexbox главная ось (main axis) — направление, вдоль которого размещаются элементы; поперечная ось (cross axis) — перпендикулярна главной. Понимание осей определяет, какое свойство управляет каким направлением.
Зачем нужно
Большинство ошибок с justify-content и align-items происходят из-за непонимания осей. Оси не фиксированы: они меняются вместе с flex-direction. Зная оси, вы всегда понимаете, в какую сторону работает каждое свойство.
Где используется
- Любая flex-раскладка — оси нужно держать в голове всегда
- Центрирование элементов по обеим осям
- Выравнивание в навигации, карточках, формах
- Переключение с горизонтальной на вертикальную раскладку
Оси при разных flex-direction
/* flex-direction: row (по умолчанию) */
/* Главная ось: → (слева направо) */
/* Поперечная ось: ↓ (сверху вниз) */
/* flex-direction: row-reverse */
/* Главная ось: ← (справа налево) */
/* Поперечная ось: ↓ */
/* flex-direction: column */
/* Главная ось: ↓ (сверху вниз) */
/* Поперечная ось: → (слева направо) */
/* flex-direction: column-reverse */
/* Главная ось: ↑ (снизу вверх) */
/* Поперечная ось: → */
Какое свойство работает по какой оси
.container {
display: flex;
flex-direction: row; /* по умолчанию */
/* Главная ось (→): */
justify-content: center; /* выравнивание элементов */
/* Поперечная ось (↓): */
align-items: center; /* выравнивание элементов */
align-content: space-between; /* выравнивание строк при flex-wrap */
}
Центрирование — наглядный пример
/* row: justify-content → горизонталь, align-items → вертикаль */
.center-row {
display: flex;
flex-direction: row;
justify-content: center; /* горизонтально */
align-items: center; /* вертикально */
}
/* column: оси меняются! */
.center-column {
display: flex;
flex-direction: column;
justify-content: center; /* вертикально (теперь главная!) */
align-items: center; /* горизонтально (поперечная) */
}
<div class="center-row">
<div>Центрирован</div>
</div>
Диаграмма осей
flex-direction: row
Main Axis →
┌───────────────────────┐
│ [A] [B] [C] │ ↑ Cross
└───────────────────────┘ ↓ Axis
flex-direction: column
Cross Axis →
┌──────┐
│ [A] │ ↑
│ [B] │ │ Main Axis
│ [C] │ ↓
└──────┘
Частые ошибки
justify-contentприflex-direction: column— в column главная ось вертикальная, поэтомуjustify-contentдвигает элементы вертикально, а не горизонтально.align-itemsбез высоты контейнера — приcolumnalign-items: centerне даёт горизонтального центрирования, если у контейнера нет ширины.- Забыть, что
flex-wrapдобавляет строки — при переносеalign-itemsработает внутри строки, аalign-content— между строками.