align-items: выравнивание по поперечной оси
align-items— свойство flex-контейнера, которое выравнивает все flex-элементы вдоль поперечной оси (cross axis) в пределах одной строки.
Зачем нужно
Когда элементы во flex-строке имеют разную высоту, нужно явно задать их вертикальное положение. align-items решает это одной декларацией для всего контейнера — без хаков с line-height или padding. Переопределить выравнивание для отдельного элемента можно через align-self.
Где используется
- Вертикальное центрирование иконки и текста в кнопке
- Выравнивание карточек разной высоты в ряду
- Прижатие подписи к базовой линии текста в навбаре
Значения
.container {
display: flex;
align-items: stretch; /* по умолчанию — элементы растягиваются */
align-items: flex-start; /* к началу поперечной оси */
align-items: flex-end; /* к концу поперечной оси */
align-items: center; /* по центру */
align-items: baseline; /* по базовой линии текста */
}
stretch (по умолчанию)
.container {
display: flex;
height: 100px;
align-items: stretch; /* элементы растянутся до 100px, если нет явного height */
}
center — вертикальное центрирование
.navbar {
display: flex;
align-items: center; /* иконка и текст выровнены по центру */
height: 56px;
}
<nav class="navbar">
<img src="logo.svg" width="24" height="24">
<span>Заголовок</span>
</nav>
baseline — по базовой линии
.row {
display: flex;
align-items: baseline;
}
/* Полезно когда элементы имеют разный font-size */
<div class="row">
<span style="font-size: 24px">Большой</span>
<span style="font-size: 14px">маленький</span>
</div>
flex-start и flex-end
.container {
display: flex;
height: 200px;
align-items: flex-start; /* элементы у верха контейнера */
}
.container-bottom {
display: flex;
height: 200px;
align-items: flex-end; /* элементы у низа контейнера */
}
Влияние flex-direction
При flex-direction: column поперечная ось становится горизонтальной:
.column-container {
display: flex;
flex-direction: column;
align-items: center; /* теперь горизонтальное центрирование */
}
Частые ошибки
align-itemsбез высоты контейнера — если контейнер подстраивается по содержимому,centerиflex-endвизуально не заметны- Путаница с
align-content—align-itemsвыравнивает элементы внутри одной строки;align-contentуправляет несколькими строками приflex-wrap: wrap stretchломает явно заданныеheight— если у элемента заданаheight,stretchне перезапишет её
Связанные темы
- justify-content -- выравнивание по главной оси
- justify-content -- выравнивание по главной оси
- align-content -- многострочное выравнивание
- align-self -- индивидуальное выравнивание
- flex-direction -- направление оси
- _MOC Flexbox