Свойство CSS `justify-content`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.
Свойство justify-content CSS определяет, как браузер распределяет пространство между элементами содержимого и вокруг них вдоль главной оси flex-контейнера и строчной оси grid- и multicol-контейнеров.
Интерактивный пример ниже демонстрирует некоторые значения justify-content с использованием grid-макета.
Попробуйте
justify-content: start;
justify-content: center;
justify-content: space-between;
justify-content: space-around;
justify-content: space-evenly;
<section class="default-example" id="default-example">
<div class="example-container">
<div class="transition-all" id="example-element">
<div>One</div>
<div>Two</div>
<div>Three</div>
</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
width: 220px;
display: grid;
grid-template-columns: 60px 60px;
grid-auto-rows: 40px;
row-gap: 10px;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
}
Синтаксис
/* Positional alignment */ justify-content: center; justify-content: start; justify-content: end; justify-content: flex-start; justify-content: flex-end; justify-content: left; justify-content: right; /* Normal alignment */ justify-content: normal; /* Distributed alignment */ justify-content: space-between; justify-content: space-around; justify-content: space-evenly; justify-content: stretch; /* Overflow alignment (for positional alignment only)*/ justify-content: safe center; justify-content: unsafe center; /* Global values */ justify-content: inherit; justify-content: initial; justify-content: revert; justify-content: revert-layer; justify-content: unset;
Значения
Свойство задаётся одним из следующих ключевых слов:
-
start - Элементы плотно упакованы друг к другу у начального края контейнера выравнивания по главной оси.
-
end - Элементы плотно упакованы друг к другу у конечного края контейнера выравнивания по главной оси.
-
flex-start - Элементы плотно упакованы друг к другу у начального края контейнера выравнивания со стороны главного начала flex-контейнера. Это применимо только к элементам flex-макета. Для элементов, не являющихся дочерними элементами flex-контейнера, это значение рассматривается как
start. -
flex-end - Элементы плотно упакованы друг к другу у конечного края контейнера выравнивания со стороны главного конца flex-контейнера. Это применимо только к элементам flex-макета. Для элементов, не являющихся дочерними элементами flex-контейнера, это значение рассматривается как
end. -
center - Элементы плотно упакованы друг к другу по центру контейнера выравнивания вдоль главной оси.
-
left - Элементы плотно упакованы друг к другу у левого края контейнера выравнивания. Если горизонтальная ось свойства не параллельна строчной оси, например когда задано
flex-direction: column;, это значение действует какstart. -
right - Элементы плотно упакованы друг к другу у правого края контейнера выравнивания по соответствующей оси. Если ось свойства не параллельна строчной оси (в grid-контейнере) или главной оси (в flexbox-контейнере), это значение действует как
start. -
normal - Ведёт себя как
stretch, за исключением multicol-контейнеров с отличным отautoзначениемcolumn-width: в этом случае столбцы принимают заданное значениеcolumn-width, а не растягиваются, чтобы заполнить контейнер. Поскольку в flex-контейнерахstretchведёт себя какstart,normalтакже ведёт себя какstart. -
space-between - Элементы равномерно распределяются внутри контейнера выравнивания вдоль главной оси. Расстояние между каждой парой соседних элементов одинаково. Первый элемент прилегает к краю главного начала, а последний — к краю главного конца.
-
space-around - Элементы равномерно распределяются внутри контейнера выравнивания вдоль главной оси. Расстояние между каждой парой соседних элементов одинаково. Пустое пространство перед первым и после последнего элемента равно половине расстояния между каждой парой соседних элементов. Если элемент только один, он будет расположен по центру.
-
space-evenly - Элементы равномерно распределяются внутри контейнера выравнивания вдоль главной оси. Расстояние между каждой парой соседних элементов, между краем главного начала и первым элементом, а также между краем главного конца и последним элементом совершенно одинаково.
-
stretch -
Если суммарный размер элементов вдоль главной оси меньше размера контейнера выравнивания, размеры элементов размером
autoравномерно увеличиваются (не пропорционально), при этом соблюдаются ограничения, заданные свойствамиmax-height/max-width(или эквивалентной функциональностью), так что суммарный размер точно заполняет контейнер выравнивания вдоль главной оси.Примечание: В flexbox-контейнерах значение
stretchдействует какflex-startилиstart. Это связано с тем, что в flexbox растяжение регулируется свойствомflex-grow. -
safe - Если элемент выходит за границы контейнера выравнивания, он выравнивается так, как если бы режим выравнивания был
start. Желаемое выравнивание применено не будет. -
unsafe - Желаемое выравнивание будет применено, даже если элемент выходит за границы контейнера выравнивания. В отличие от
safe, при котором желаемое выравнивание игнорируется, чтобы предотвратить переполнение.
Описание
Определённое в модуле выравнивания блоков CSS свойство justify-content применяется к multicol-, flex- и grid-контейнерам. Свойство не применяется к блочным контейнерам и не оказывает на них влияния.
Это свойство использует многие ключевые слова, общие со свойством align-content, но не все! justify-content не участвует в выравнивании по базовой линии и поэтому не принимает значения для выравнивания по базовой линии.
В flex-макетах свойство задаёт распределение свободного пространства между flex-элементами или вокруг них вдоль главной оси. Это свойство влияет на пространство между элементами в строке, а не на пространство между строками. Выравнивание выполняется после применения размеров и автоматических полей. Это означает, что если у одного или нескольких flex-элементов в строке коэффициент flex-grow больше 0, свойство не оказывает влияния, поскольку в этой строке нет пространства для распределения. Кроме того, поскольку растяжение вдоль главной оси регулируется свойством flex, значение stretch действует как flex-start.
В grid-макете это свойство распределяет доступное пространство между столбцами сетки или вокруг них, а не между элементами сетки. Если grid-контейнер больше самой сетки, свойство justify-content можно использовать, чтобы выровнять сетку вдоль строчной оси и тем самым выровнять столбцы.
Растягиваться с помощью свойств align-content и justify-content могут только дорожки сетки размера auto (и только дорожки размера auto). Поэтому по умолчанию дорожка размером auto занимает всё оставшееся пространство grid-контейнера. Чтобы пространство можно было распределить, строчный размер сетки должен быть меньше строчного размера grid-контейнера; в противном случае свойство не оказывает влияния.
Формальное определение
| Начальное значение | normal |
|---|---|
| Применяется к | flex-контейнерам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
justify-content = normal | <content-distribution> | <overflow-position>? [ <content-position> | left | right ] <content-distribution> = space-between | space-around | space-evenly | stretch <overflow-position> = unsafe | safe <content-position> = center | start | end | flex-start | flex-end
Примеры
Пример простой сетки
В этом примере сетка уже своего grid-контейнера, и мы используем justify-content, чтобы равномерно распределить доступное пространство вокруг столбцов сетки и между ними.
HTML
Контейнер <section>, который станет нашим grid-контейнером, содержит 16 вложенных элементов <div>, которые станут элементами сетки.
<section class="container"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> <div>E</div> <div>F</div> <div>G</div> <div>H</div> <div>I</div> <div>J</div> <div>K</div> <div>L</div> <div>M</div> <div>N</div> <div>O</div> <div>P</div> </section>
CSS
.container {
margin: 5px;
border: 1px solid;
box-sizing: border-box;
}
div {
line-height: 2em;
border: 1px solid;
box-sizing: border-box;
text-align: center;
}
Мы задаём ширину контейнера 500px и указываем три столбца шириной 80px каждый. Это означает, что для распределения между ними или вокруг них доступно 260px. Затем мы задаём justify-content: space-evenly, то есть перед каждым столбцом, между столбцами и после них будет 65px пространства.
Мы задаём разную ширину (и фоновый цвет), чтобы продемонстрировать, как выравниваются столбцы.
.container {
display: grid;
grid: auto-flow / repeat(3, 80px);
width: 500px;
justify-content: space-evenly;
}
div {
background-color: pink;
width: 80px;
}
div:nth-of-type(n + 9) {
width: 35px;
background-color: lightgreen;
}
div:nth-last-of-type(3) {
width: 250px;
background-color: lightblue;
}
Результат
Обратите внимание, что justify-contents выравнивает столбцы и не влияет на элементы или их выравнивание в областях сетки. Элементы сетки, даже выходящие за границы своей ячейки, не влияют на выравнивание столбцов.
Ключевое слово safe
В этом примере демонстрируется ключевое слово safe. Мы задаём четыре центрированных flex-элемента, которым запрещено переноситься, поэтому они выходят за границы своего однострочного контейнера flex-линии. Добавляя safe к center в свойстве justify-content, мы добиваемся того, что переполняющее содержимое ведёт себя так, как если бы режим выравнивания был start
<p><code>justify-content: center;</code></p> <section class="container safe"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> </section> <p><code>justify-content: safe center;</code></p> <section class="container safe-center"> <div>A</div> <div>B</div> <div>C</div> <div>D</div> </section> <p><code>justify-content: safe center;</code> with 3 items</p> <section class="container safe-center"> <div>A</div> <div>B</div> <div>C</div> </section>
.container {
margin: 5px auto;
border: 1px dashed;
box-sizing: border-box;
background-color: lightblue;
}
div {
line-height: 1em;
border: 1px solid;
box-sizing: border-box;
text-align: center;
background-color: pink;
}
Для контейнера задано center, а для всех контейнеров, кроме первого, добавлено ключевое слово safe:
.container {
align-items: baseline;
display: flex;
width: 350px;
height: 2em;
}
.safe {
justify-content: center;
}
.safe-center {
justify-content: safe center;
}
div {
flex: 0 0 100px;
}
Результат
Когда элемент выходит за границы контейнера выравнивания, при наличии safe режим выравнивания действует как start, и выравнивание center не применяется. Ключевое слово safe не оказывает влияния, если элементы не выходят за границы контейнера.
Визуализация распределения flex-элементов
В этом примере используется многострочный flex-макет с переносом. Второй flex-элемент имеет положительный коэффициент роста и занимает всё доступное свободное пространство в первой flex-строке.
CSS
#container {
margin: 5px auto;
border: 1px dashed black;
box-sizing: border-box;
}
div {
line-height: 2em;
border: 1px solid;
box-sizing: border-box;
text-align: center;
}
#container {
display: flex;
flex-flow: row wrap;
justify-content: space-between; /* Can be changed in the live sample */
width: 510px;
}
div {
line-height: 2em;
flex: 0 0 120px;
background-color: pink;
}
div:nth-of-type(2) {
flex-grow: 1;
background-color: yellow;
}
div:nth-of-type(n + 9) {
flex: 0 0 35px;
background-color: lightgreen;
}
div:last-of-type {
flex: 0 0 300px;
background-color: lightblue;
}
<section id="container"> <div>A</div> <div>GROW</div> <div>C</div> <div>D</div> <div>E</div> <div>F</div> <div>G</div> <div>H</div> <div>I</div> <div>J</div> <div>K</div> <div>L</div> <div>M</div> <div>N</div> <div>O</div> <div>P</div> </section> <select id="justifyContent"> <option value="start">start</option> <option value="end">end</option> <option value="flex-start">flex-start</option> <option value="flex-end">flex-end</option> <option value="center">center</option> <option value="left">left</option> <option value="right">right</option> <option value="space-between" selected>space-between</option> <option value="space-around">space-around</option> <option value="space-evenly">space-evenly</option> <option value="stretch">stretch</option> </select>
const justifyContent = document.getElementById("justifyContent");
justifyContent.addEventListener("change", (evt) => {
document.getElementById("container").style.justifyContent = evt.target.value;
});
Результат
Выберите разные ключевые слова в раскрывающемся меню, чтобы увидеть различные ключевые значения justify-content. Поскольку элемент в первой строке может расти, в этой строке нет свободного пространства для распределения свойством justify-content. При значении space-between первый элемент каждой строки прилегает к краю главного начала, а последний — к краю главного конца. Поэтому, если в строке только один элемент, он будет выровнен по краю главного начала (как видно в последней строке). Для других значений space-*, например space-evenly и space-around, это не так: они располагают одиночные flex-элементы в строке по центру.
Спецификации
| Спецификация |
|---|
| Модуль выравнивания блоков CSS, уровень 3 # align-justify-content |
| Модуль гибкой блочной компоновки CSS, уровень 1 # justify-content-property |
Совместимость с браузерами
| Настольные | Мобильные | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | WebView для Android | WebView на iOS | |
justify-content |
29
21
|
12
12
|
20
49
|
12.1 |
9
7
|
29
25
|
20
49
|
12.1 |
9
7
|
2.0
1.5
|
4.4
4.4
|
9
7
|
flex_context |
52
21–52В более ранних версиях спецификации дочерние элементы с абсолютным позиционированием рассматриваются как flex-элементы размером 0 на 0. В более поздних версиях спецификации дочерние элементы исключаются из потока, а их позиции задаются на основе свойств выравнивания и распределения. Начиная с Chrome 52 в Chrome реализовано новое поведение. |
12 |
20До Firefox 27 Firefox поддерживал только однострочный flexbox. |
12.1 |
7 |
52
25–52В более ранних версиях спецификации дочерние элементы с абсолютным позиционированием рассматриваются как flex-элементы размером 0 на 0. В более поздних версиях спецификации дочерние элементы исключаются из потока, а их позиции задаются на основе свойств выравнивания и распределения. В Chrome для Android новое поведение реализовано начиная с версии 52. |
20До Firefox для Android 27 Firefox для Android поддерживал только однострочный flexbox. |
12.1 |
7 |
6.0
1.5–6.0В более ранних версиях спецификации дочерние элементы с абсолютным позиционированием рассматриваются как flex-элементы размером 0 на 0. В более поздних версиях спецификации дочерние элементы исключаются из потока, а их позиции задаются на основе свойств выравнивания и распределения. В Samsung Browser новое поведение реализовано начиная с версии 6.0. |
52
4.4–52В более ранних версиях спецификации дочерние элементы с абсолютным позиционированием рассматриваются как flex-элементы размером 0 на 0. В более поздних версиях спецификации дочерние элементы исключаются из потока, а их позиции задаются на основе свойств выравнивания и распределения. В WebView для Android новое поведение реализовано начиная с версии 52. |
7 |
grid_context |
57 |
16 |
52 |
44 |
10.1 |
52 |
52 |
43 |
10.3 |
6.2 |
57 |
10.3 |
left |
21 |
79 |
20 |
15 |
7 |
25 |
20 |
14 |
7 |
1.5 |
4.4 |
7 |
normal |
21 |
79 |
20 |
15 |
7 |
25 |
20 |
14 |
7 |
1.5 |
4.4 |
7 |
right |
21 |
79 |
20 |
15 |
7 |
25 |
20 |
14 |
7 |
1.5 |
4.4 |
7 |
См. также
- Основные понятия flexbox
- Выравнивание элементов во flex-контейнере
- Выравнивание блоков в grid-макете
- Модуль выравнивания блоков CSS
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/justify-content