align-content: многострочное выравнивание
align-contentвыравнивает несколько flex-строк (или Grid-треков) внутри контейнера по поперечной оси и работает только приflex-wrap: wrap(в Flexbox) или в Grid — в отличие отalign-items, которое выравнивает элементы внутри одной строки.
Зачем нужно
При flex-wrap: wrap содержимое может образовывать несколько строк. align-items выравнивает элементы относительно своей строки, но не управляет тем, как строки распределяются по высоте контейнера. align-content заполняет этот пробел: прижать строки к верху, распределить равномерно или отцентрировать их.
Где используется
- Многострочные карточные сетки с фиксированной высотой контейнера
- Центрирование нескольких строк контента в hero-секции
- Grid: выравнивание строк внутри явной сетки
Значения
.container {
display: flex;
flex-wrap: wrap;
height: 400px; /* нужна явная высота! */
align-content: flex-start; /* строки у начала поперечной оси */
align-content: flex-end; /* строки у конца */
align-content: center; /* строки по центру */
align-content: space-between; /* первая и последняя у краёв */
align-content: space-around; /* равные отступы вокруг строк */
align-content: space-evenly; /* все промежутки одинаковы */
align-content: stretch; /* строки растягиваются (по умолчанию) */
}
Примеры
Строки по центру контейнера
.hero {
display: flex;
flex-wrap: wrap;
height: 100vh;
align-content: center; /* строки вертикально по центру */
justify-content: center; /* элементы горизонтально по центру */
gap: 16px;
}
<section class="hero">
<h1>Заголовок</h1>
<p>Подзаголовок</p>
<div class="buttons">...</div>
</section>
Карточки с равномерными строками
.gallery {
display: flex;
flex-wrap: wrap;
gap: 16px;
height: 600px;
align-content: space-between; /* пространство равномерно между строками */
}
.gallery__item {
flex: 1 1 200px;
}
В Grid
.grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
height: 500px;
align-content: start; /* строки Grid прижаты к верху */
gap: 16px;
}
Разница align-content vs align-items
align-items: [A] [B] [C] — выравнивание элементов внутри строки
[D] [E] [F]
align-content: ↑
[A] [B] [C] — выравнивание самих строк
[D] [E] [F]
↓
.container {
display: flex;
flex-wrap: wrap;
height: 400px;
align-items: center; /* A, B, C, D, E, F по центру своей строки */
align-content: center; /* обе строки по центру контейнера */
}
Когда align-content не работает
- При
flex-wrap: nowrap— одна строка, не к чему применять - Когда у контейнера нет явной высоты (или
height: auto) - При
display: flexбезflex-wrap: wrap
Частые ошибки
align-contentвместоalign-itemsпри одной строке —align-contentне имеет эффекта без переноса; используйтеalign-items- Нет высоты контейнера — без явной высоты строки заполняют контейнер полностью, свободного пространства нет
space-betweenпри одной строке — строка прижимается к началу поперечной оси, эффект не виден
Связанные темы
- align-items -- выравнивание по поперечной оси
- align-self -- индивидуальное выравнивание
- justify-content -- выравнивание по главной оси
- flex-wrap -- перенос строк
- _MOC Flexbox