flex-direction: направление оси
flex-directionопределяет направление главной оси flex-контейнера — то есть в каком направлении выстраиваются flex-элементы.
Зачем нужно
Одним свойством можно переключить раскладку из горизонтальной в вертикальную (или наоборот). Это основа адаптивных компонентов: на десктопе элементы в строку (row), на мобильном в колонку (column) — и все justify-content/align-items переориентируются автоматически.
Где используется
- Мобильный навбар: переключение с
rowнаcolumn - Вертикальные списки:
flex-direction: column - Обратный порядок элементов без изменения HTML
Значения
.container {
display: flex;
flex-direction: row; /* по умолчанию — слева направо */
flex-direction: row-reverse; /* справа налево */
flex-direction: column; /* сверху вниз */
flex-direction: column-reverse;/* снизу вверх */
}
Примеры
row — горизонтальная ось (по умолчанию)
.navbar {
display: flex;
flex-direction: row;
justify-content: space-between;
align-items: center;
}
<nav class="navbar">
<a href="/">Лого</a>
<a href="/about">О нас</a>
<a href="/contact">Контакты</a>
</nav>
column — вертикальная ось
.card {
display: flex;
flex-direction: column;
gap: 12px;
}
.card__footer {
margin-top: auto; /* прижать вниз */
}
<div class="card">
<img src="photo.jpg">
<h2>Заголовок</h2>
<p>Описание</p>
<button class="card__footer">Купить</button>
</div>
Адаптивное переключение
.features {
display: flex;
flex-direction: column; /* мобильный — вертикально */
}
@media (min-width: 768px) {
.features {
flex-direction: row; /* планшет и выше — горизонтально */
}
}
row-reverse — обратный порядок
.chat-message--own {
display: flex;
flex-direction: row-reverse; /* аватар справа, текст слева */
gap: 8px;
}
Влияние на оси
При смене flex-direction меняются главная и поперечная оси, а вместе с ними меняется и то, что делают justify-content и align-items:
flex-direction |
justify-content |
align-items |
|---|---|---|
row |
горизонталь | вертикаль |
column |
вертикаль | горизонталь |
Частые ошибки
- Забытая смена осей — при
flex-direction: columnjustify-content: centerцентрирует по вертикали, а не горизонтали row-reverseне меняетjustify-content: flex-start—flex-startприrow-reverseозначает правый край; нужноflex-endдля "обычного" левого краяcolumnбез явной высоты контейнера — приjustify-content: centerи высоте по контенту нет пространства для центрирования
Связанные темы
- flex-wrap -- перенос строк
- flex-direction -- направление оси
- flex-flow -- сокращённое свойство
- justify-content -- выравнивание по главной оси
- align-items -- выравнивание по поперечной оси
- _MOC Flexbox