CSS свойство align-items
Определение и применение
Свойство align-items задаётся контейнеру и определяет выравнивание его непосредственных дочерних
элементов. Во Flexbox (display: flex) элементы выравниваются по поперечной оси внутри своей строки. В
Grid (display: grid) каждый элемент выравнивается внутри своей области сетки по блочной оси — при обычном
горизонтальном направлении письма это вертикаль.
Во Flexbox направление поперечной оси зависит от
flex-direction: при row она обычно вертикальная, при column — горизонтальная. Направление письма также
влияет на оси.
Для отдельного элемента общее выравнивание можно изменить через
align-self, а в Grid выравнивание по другой оси задаёт
justify-items.
Подробнее о настройке Flexbox-контейнера — в статье учебника CSS «Верстка по Flexbox (работа с контейнерами)».
Сравните выравнивание всех элементов внутри ячеек по вертикали в генераторе Grid. Настройки можно проверить в превью и сохранить как HTML/CSS.
flex-direction: row и writing-mode: horizontal-tb. При stretch поперечный размер элементов — auto; baseline совмещает базовые линии текста.Попробуйте значения align-items
Выравниваются элементы в одной строке по поперечной оси. У второго элемента увеличен текст, чтобы было видно baseline.
align-items: stretch
HTML и CSS примера
<div class="stage demo-target">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 300px;
height: 210px;
padding: 10px;
border: 2px dashed #607589;
background: #edf2f5;
color: #172c3d;
font: 16px/1.4 system-ui;
}
.item {
padding: 10px;
border: 2px solid #245a85;
background: #b9d7eb;
}
.demo-target {
display: flex;
gap: 8px;
align-items: stretch;
}
.item {
width: 45px;
min-height: 40px;
flex-shrink: 0;
}
.item:nth-child(2) {
font-size: 26px;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 300px;
height: 210px;
padding: 10px;
border: 2px dashed #607589;
background: #edf2f5;
color: #172c3d;
font: 16px/1.4 system-ui;
}
.item {
padding: 10px;
border: 2px solid #245a85;
background: #b9d7eb;
}
.demo-target {
display: flex;
gap: 8px;
align-items: flex-start;
}
.item {
width: 45px;
min-height: 40px;
flex-shrink: 0;
}
.item:nth-child(2) {
font-size: 26px;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 300px;
height: 210px;
padding: 10px;
border: 2px dashed #607589;
background: #edf2f5;
color: #172c3d;
font: 16px/1.4 system-ui;
}
.item {
padding: 10px;
border: 2px solid #245a85;
background: #b9d7eb;
}
.demo-target {
display: flex;
gap: 8px;
align-items: center;
}
.item {
width: 45px;
min-height: 40px;
flex-shrink: 0;
}
.item:nth-child(2) {
font-size: 26px;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 300px;
height: 210px;
padding: 10px;
border: 2px dashed #607589;
background: #edf2f5;
color: #172c3d;
font: 16px/1.4 system-ui;
}
.item {
padding: 10px;
border: 2px solid #245a85;
background: #b9d7eb;
}
.demo-target {
display: flex;
gap: 8px;
align-items: flex-end;
}
.item {
width: 45px;
min-height: 40px;
flex-shrink: 0;
}
.item:nth-child(2) {
font-size: 26px;
}
* {
box-sizing: border-box;
}
.stage {
width: 100%;
max-width: 300px;
height: 210px;
padding: 10px;
border: 2px dashed #607589;
background: #edf2f5;
color: #172c3d;
font: 16px/1.4 system-ui;
}
.item {
padding: 10px;
border: 2px solid #245a85;
background: #b9d7eb;
}
.demo-target {
display: flex;
gap: 8px;
align-items: baseline;
}
.item {
width: 45px;
min-height: 40px;
flex-shrink: 0;
}
.item:nth-child(2) {
font-size: 26px;
}
Поддержка браузерами
Спецификации: CSS align, CSS flexbox
Поддерживается во всех основных браузерах с 2015 года.
| Возможность | Компьютеры | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
align-items | 29 Версия 29 выпущена в 2013 г. Версия 21 выпущена в 2012 г. — Префикс -webkit- | 12 Версия 12 выпущена в 2015 г. Версия 12 выпущена в 2015 г. — Префикс -webkit- | 20 Версия 20 выпущена в 2013 г. Версия 49 выпущена в 2016 г. — Префикс -webkit- | 16 Версия 16 выпущена в 2013 г. Версия 15 выпущена в 2013 г. — Префикс -webkit- | 9 Версия 9 выпущена в 2015 г. Версия 7 выпущена в 2013 г. — Префикс -webkit- | 29 Версия 29 выпущена в 2013 г. Версия 25 выпущена в 2013 г. — Префикс -webkit- | 20 Версия 20 выпущена в 2013 г. Версия 49 выпущена в 2016 г. — Префикс -webkit- | 16 Версия 16 выпущена в 2013 г. Версия 14 выпущена в 2013 г. — Префикс -webkit- | 9 Версия 9 выпущена в 2015 г. Версия 7 выпущена в 2013 г. — Префикс -webkit- | 2.0 Версия 2.0 выпущена в 2014 г. Версия 1.5 выпущена в 2013 г. — Префикс -webkit- | 4.4 Версия 4.4 выпущена в 2013 г. Версия 4.4 выпущена в 2013 г. — Префикс -webkit- | 9 Версия 9 выпущена в 2015 г. Версия 7 выпущена в 2013 г. — Префикс -webkit- |
anchor-center | 125 | 125 | 147 | 111 | 26 | 125 | 147 | 83 | 26 | 27.0 | 125 | 26 |
| В flex-контейнере | 52 Версия 52 выпущена в 2016 г. Версия 21 выпущена в 2012 г. — Удалено в 52; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Chrome implements the new behavior beginning with Chrome 52. | 12 | 20 Версия 20 выпущена в 2013 г. Примечание MDN (англ.) Multi-line flexbox has been supported since Firefox 28. | 39 Версия 39 выпущена в 2016 г. Версия 15 выпущена в 2013 г. — Удалено в 39; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Opera implements the new behavior beginning with Opera 39. | 7 | 52 Версия 52 выпущена в 2016 г. Версия 25 выпущена в 2013 г. — Удалено в 52; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Chrome Android implements the new behavior beginning with Chrome Android 52. | 20 Версия 20 выпущена в 2013 г. Примечание MDN (англ.) Multi-line flexbox has been supported since Firefox for Android 28. | 41 Версия 41 выпущена в 2016 г. Версия 14 выпущена в 2013 г. — Удалено в 41; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Opera Android implements the new behavior beginning with Opera Android 41. | 7 | 6.0 Версия 6.0 выпущена в 2017 г. Версия 1.5 выпущена в 2013 г. — Удалено в 6.0; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. Samsung Browser implements the new behavior beginning with Samsung Browser 6.0. | 52 Версия 52 выпущена в 2016 г. Версия 4.4 выпущена в 2013 г. — Удалено в 52; Частичная поддержка Примечание MDN (англ.) Older versions of the specification treat absolute positioned children as though they are a 0 by 0 flex item. Later specification versions take the children out of the flow and set their positions based on align and justify properties. WebView Android implements the new behavior beginning with WebView Android 52. | 7 |
baseline | 21 | 79 | 28 | 44 | 7 | 25 | 28 | 43 | 7 | 7.0 | 57 | 7 |
| first baseline | 59 | 79 | 52 | 46 | 11 | 59 | 52 | 43 | 11 | 7.0 | 59 | 11 |
| last baseline | 108 | 108 | 52 | 94 | 16.2 | 108 | 52 | 73 | 16.2 | 21.0 | 108 | 16.2 |
| safe and unsafe | 115 Версия 115 выпущена в 2023 г. Примечание MDN (англ.) Before version 115, this value is recognized, but has no effect. | 115 Версия 115 выпущена в 2023 г. Примечание MDN (англ.) Before version 115, this value is recognized, but has no effect. | 63 | 101 Версия 101 выпущена в 2023 г. Примечание MDN (англ.) Before version 101, this value is recognized, but has no effect. | 17.6 | 115 Версия 115 выпущена в 2023 г. Примечание MDN (англ.) Before version 115, this value is recognized, but has no effect. | 63 | 77 Версия 77 выпущена в 2023 г. Примечание MDN (англ.) Before version 77, this value is recognized, but has no effect. | 17.6 | 23.0 Версия 23.0 выпущена в 2023 г. Примечание MDN (англ.) Before version 23.0, this value is recognized, but has no effect. | 115 Версия 115 выпущена в 2023 г. Примечание MDN (англ.) Before version 115, this value is recognized, but has no effect. | 17.6 |
| start and end | 93 | 93 | 45 | 79 | 15.4 | 93 | 45 | 66 | 15.4 | 17.0 | 93 | 15.4 |
| В grid-контейнере | 57 | 16 | 52 | 44 | 10.1 | 52 | 52 | 43 | 10.3 | 6.2 | 57 | 10.3 |
| start and end | 57 | 79 | 52 | 44 | 11 | 57 | 52 | 43 | 11 | 7.0 | 57 | 11 |
поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31
Поддержка отдельных значений, в том числе last baseline, safe и anchor-center,
может отличаться от поддержки свойства в целом.
CSS синтаксис:
/* Поведение по умолчанию и растягивание */
align-items: normal | stretch;
/* Выравнивание у края или по центру */
align-items: start | end | center | flex-start | flex-end | self-start | self-end;
/* Выравнивание по базовой линии */
align-items: baseline | first baseline | last baseline;
/* Поведение при переполнении: необязательный модификатор */
align-items: [ safe | unsafe ]? [ start | end | center | flex-start | flex-end | self-start | self-end ];
/* Якорное позиционирование */
align-items: anchor-center;
/* Глобальные значения */
align-items: initial | inherit | unset | revert | revert-layer;
Знак | разделяет варианты, квадратные скобки группируют их, а ? означает необязательную
часть. Например, допустимы center и safe center.
JavaScript синтаксис:
element.style.alignItems = "center";Начальное значение свойства
normal.
Значения свойства
| Значение | Описание |
|---|---|
normal |
Начальное значение. Во Flexbox действует как stretch. В Grid обычно растягивает элементы, но для
элементов с собственными размерами или соотношением сторон может действовать как start, например
для изображения.
|
stretch |
Растягивает элемент по поперечной оси до размера его строки Flexbox или по блочной оси до размера области Grid.
Размер по этой оси должен быть auto; ограничения
min-width,
max-width,
min-height
и
max-height
сохраняются. Автоматические отступы margin по этой оси отменяют растягивание.
|
center |
Размещает элемент по центру его строки Flexbox или области Grid по оси выравнивания. |
start / end |
Выравнивает у начального или конечного края по оси выравнивания с учётом направления письма контейнера. Работает и во Flexbox, и в Grid. |
flex-start / flex-end |
Во Flexbox выравнивает у начала или конца поперечной оси. При
flex-wrap: wrap-reverse эти края меняются местами. В Grid действует как start /
end.
|
self-start / self-end |
Выбирает начальный или конечный край с учётом направления письма самого элемента (как расположен текст внутри
него — горизонтально или вертикально и в каком направлении идут строки). Отличие от start /
end заметно, когда у элемента и контейнера разные направления письма.
|
baseline / first baseline / last baseline |
Совмещает первые или последние базовые линии элементов одной группы выравнивания. Для текста это линия, на
которой стоят буквы. baseline означает first baseline.
|
safe / unsafe |
Модификаторы позиционного выравнивания. Например, safe center при переполнении переключает
выравнивание к началу, а unsafe center сохраняет центрирование, даже если часть элемента выходит за
границы.
|
anchor-center |
Для элементов с якорным позиционированием (их положение привязано к другому элементу — якорю) задаёт
центрирование относительно якоря по блочной оси. Это отдельный сценарий CSS Anchor Positioning; для
центрирования обычных Flexbox- и Grid-элементов используйте center.
|
initial
|
Устанавливает начальное значение свойства. |
inherit
|
Наследует вычисленное значение свойства у родительского элемента. |
unset |
Для ненаследуемого свойства align-items устанавливает его
начальное значение.
|
revert |
Отменяет заданное в коде значение свойства для этого элемента: применяются пользовательские или стандартные стили браузера. Если они не задают значение, свойство наследуется или получает начальное значение по обычным правилам. Не возвращает значение из предыдущей строки CSS. |
revert-layer |
Сбрасывает значение свойства для текущего слоя каскада @layer. Применяется значение из другого слоя
по правилам каскада; если подходящего значения нет, возможен откат к стилям пользователя или браузера.
|
Почему align-items не работает
-
Проверьте, что свойство задано Flexbox- или Grid-контейнеру. В обычном блоке
display: blockоно не выравнивает содержимое так, какalign-content. -
Для заметного перемещения внутри строки или ячейки нужно свободное место. Если элемент занимает её целиком, разницы
между
startиcenterне видно. -
Если
stretchне растягивает элемент, проверьте его размер по оси выравнивания. Например, приflex-direction: rowзаданнаяheightмешает растягиванию по высоте. -
Проверьте
align-selfу дочернего элемента: значение, отличное отauto, задаёт ему собственное выравнивание. Автоматические отступыmarginпо оси выравнивания также могут изменить результат.
Спецификация
CSS Box Alignment Module Level 3. Значение anchor-center описано в
CSS Anchor Positioning Module Level 1.
Наследуется
Нет. Выравнивание дочерних элементов через align-self: auto не является наследованием свойства
align-items.
Анимируемое
Тип анимации — дискретный: значение переключается без плавных промежуточных положений.
Примеры, попробуйте сами
Выравнивание во Flexbox
В контейнере одна строка. Замените center на flex-start, flex-end или stretch. У элементов автоматическая высота: при stretch они растянутся по высоте контейнера.
base.css
* {
box-sizing: border-box;
}
body {
margin: 16px;
font:
16px/1.4 system-ui,
sans-serif;
color: #172c3d;
}
.container {
gap: 8px;
padding: 8px;
background: #edf2f5;
border: 2px dashed #607589;
}
.item {
padding: 8px;
background: #b9d7eb;
border: 1px solid #245a85;
min-width: 0;
}
.item {
flex: 1;
}
index.html
<div class="container">
<div class="item">Одна строка</div>
<div class="item">Две<br />строки</div>
<div class="item">Три<br />строки<br />текста</div>
</div>
style.css
.container {
display: flex;
height: 240px; /* Свободное место по поперечной оси. */
align-items: center;
}
Выравнивание внутри ячеек Grid
Замените center на start, end или stretch. Каждый элемент выравнивается внутри своей ячейки; размеры строк сетки остаются прежними.
base.css
* {
box-sizing: border-box;
}
body {
margin: 16px;
font:
16px/1.4 system-ui,
sans-serif;
color: #172c3d;
}
.container {
gap: 8px;
padding: 8px;
background: #edf2f5;
border: 2px dashed #607589;
}
.item {
padding: 8px;
background: #b9d7eb;
border: 1px solid #245a85;
min-width: 0;
}
index.html
<div class="container">
<div class="item">Одна строка</div>
<div class="item">Две<br />строки</div>
<div class="item">Ещё один элемент</div>
<div class="item">Три<br />строки<br />текста</div>
</div>
style.css
.container {
display: grid;
grid-template-columns: repeat(2, 1fr);
grid-auto-rows: 120px; /* Высота каждой строки сетки. */
align-items: center;
}
Выравнивание по базовой линии
У надписей разный размер шрифта. Замените baseline на flex-start или center: сравните положение текста и верхних краёв рамок.
base.css
* {
box-sizing: border-box;
}
body {
margin: 16px;
font:
16px/1.4 system-ui,
sans-serif;
color: #172c3d;
}
.container {
gap: 8px;
padding: 8px;
background: #edf2f5;
border: 2px dashed #607589;
}
.item {
padding: 8px;
background: #b9d7eb;
border: 1px solid #245a85;
min-width: 0;
}
index.html
<div class="container">
<div class="item small">Текст</div>
<div class="item large">Текст</div>
<div class="item medium">Текст</div>
</div>
style.css
.container {
display: flex;
height: 200px;
align-items: baseline; /* Совмещаем базовые линии текста. */
}
.small {
font-size: 16px;
}
.large {
font-size: 36px;
}
.medium {
font-size: 24px;
}