Свойство CSS `flex-wrap`
Baseline Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.
Свойство flex-wrap CSS определяет, должны ли flex-элементы располагаться в одной строке или могут переноситься на несколько строк. Если перенос разрешён, свойство задаёт направление расположения строк.
Сокращённое свойство flex-flow можно использовать для задания свойств flex-direction и flex-wrap, которые определяют главную и поперечную оси flex-контейнера соответственно.
Попробуйте
flex-wrap: nowrap;
flex-wrap: wrap;
flex-wrap: wrap-reverse;
flex-wrap: wrap balance;
<section class="default-example" id="default-example">
<div class="transition-all" id="example-element">
<div>Item One</div>
<div>Item Two</div>
<div>Item Three</div>
<div>Item Four</div>
<div>Item Five</div>
<div>Item Six</div>
<div>Item Seven</div>
</div>
</section>
#example-element {
border: 1px solid #c5c5c5;
width: 80%;
display: flex;
}
#example-element > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
width: 60px;
margin: 10px;
}
Синтаксис
/* Keyword values */ flex-wrap: nowrap; flex-wrap: wrap; flex-wrap: wrap-reverse; flex-wrap: balance; flex-wrap: wrap balance; flex-wrap: balance wrap-reverse; /* Global values */ flex-wrap: inherit; flex-wrap: initial; flex-wrap: revert; flex-wrap: revert-layer; flex-wrap: unset;
Значения
Это свойство задаётся одним значением из следующего списка или двумя значениями, разделёнными пробелом, при использовании balance:
-
nowrap - Flex-элементы размещаются в одной строке, что может привести к переполнению flex-контейнера. Это начальное значение.
-
wrap - Flex-элементы могут переноситься на несколько строк.
-
wrap-reverse - Работает так же, как
wrap, но строки располагаются в обратном порядке. -
balance - Определяет, что flex-элементы, перенесённые на несколько строк, распределяются так, чтобы длины строк были как можно более похожи. Если
balanceуказано как единственное ключевое слово, для другого ключевого слова используется значение по умолчаниюwrap.
Описание
Свойство flex-wrap определяет, могут ли дочерние flex-элементы flex-контейнера переноситься на несколько flex-строк, а если перенос разрешён — должны ли элементы равномерно распределяться по flex-строкам.
Начальное значение nowrap указывает, что все элементы должны располагаться в одной flex-строке, а значит, они могут переполнить контейнер. Ключевые слова wrap и wrap-reverse предотвращают переполнение, указывая, что flex-элементы могут размещаться, или переноситься, на несколько строк.
При значении wrap cross-start соответствует inline-start или block-start в зависимости от значения flex-direction и текущего режима письма. При значении wrap-reverse cross-start соответствует inline-end или block-end.
Балансировка распределения flex-элементов
По умолчанию, если указано wrap или wrap-reverse, каждая flex-строка заполняется flex-элементами, прежде чем элементы будут перенесены на следующую строку. Это может привести к неравномерному распределению элементов: последняя flex-строка может содержать меньше элементов. Если значения flex-grow этих элементов ненулевые, дополнительное доступное пространство распределяется между меньшим числом элементов, из-за чего они становятся намного больше элементов в заполненных flex-строках.
Ключевое слово balance можно использовать для более равномерного распределения элементов по строкам. При необходимости свойство flex-line-count позволяет задать минимальное количество строк, по которым следует распределить элементы.
Если balance указано как единственное ключевое слово, для другого ключевого слова используется значение по умолчанию wrap.
Для flex-контейнера с балансировкой переноса можно задать значение свойства flex-line-count, чтобы указать минимальное число строк, по которым следует распределить flex-элементы. Свойство flex-line-count не влияет на результат, если balance не указано внутри flex-wrap.
Если balance указано вместе с nowrap, свойство недопустимо.
Формальное определение
| Начальное значение | nowrap |
|---|---|
| Применяется к | flex-контейнерам |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | дискретный |
Формальный синтаксис
flex-wrap =
nowrap |
[ wrap | wrap-reverse ] ||
balance
Примеры
Задание значений переноса flex-контейнера
HTML
<h4>This is an example for flex-wrap:wrap</h4> <div class="content"> <div class="red">1</div> <div class="green">2</div> <div class="blue">3</div> </div> <h4>This is an example for flex-wrap:nowrap</h4> <div class="content1"> <div class="red">1</div> <div class="green">2</div> <div class="blue">3</div> </div> <h4>This is an example for flex-wrap:wrap-reverse</h4> <div class="content2"> <div class="red">1</div> <div class="green">2</div> <div class="blue">3</div> </div>
CSS
/* Common Styles */
.content,
.content1,
.content2 {
color: white;
font: 100 24px/100px sans-serif;
height: 150px;
width: 897px;
text-align: center;
}
.content div,
.content1 div,
.content2 div {
height: 50%;
width: 300px;
}
.red {
background: orangered;
}
.green {
background: yellowgreen;
}
.blue {
background: steelblue;
}
/* Flexbox Styles */
.content {
display: flex;
flex-wrap: wrap;
}
.content1 {
display: flex;
flex-wrap: nowrap;
}
.content2 {
display: flex;
flex-wrap: wrap-reverse;
}
Результат
Демонстрация ключевого слова balance
В этом примере демонстрируется влияние ключевого слова balance в свойстве flex-wrap и различных значений flex-line-count.
HTML
<form>
<div>
<input type="checkbox" id="reverse" name="reverse" />
<label for="reverse">Set <code>wrap-reverse</code>?</label>
</div>
<div>
<input type="checkbox" id="balance" name="balance" checked />
<label for="balance">Set <code>balance</code>?</label>
</div>
<div>
<label for="line-count"><code>flex-line-count</code></label>
<input
type="range"
id="line-count"
name="line-count"
min="1"
max="12"
value="3" />
<output>3</output>
</div>
</form>
<hr />
<p>Currently set: <code>flex-wrap: wrap; flex-line-count: 3;</code></p>
<hr />
Мы добавили контейнер <div> с class, равным box, и десятью дочерними элементами <div>.
<div class="box"> <div>One</div> <div>Two</div> <div>Three</div> <div>Four</div> <div>Five</div> <div>Six</div> <div>Seven</div> <div>Eight</div> <div>Nine</div> <div>Ten</div> </div>
Мы также добавили элементы управления, позволяющие изменять параметры flex-контейнера, в том числе:
- Переключение
flex-wrapмежду значениямиwrapиwrap-reverse. - Включение и отключение ключевого слова
balance. - Изменение значения
flex-line-count.
Для краткости HTML и JavaScript скрыты.
CSS
Мы применяем display: flex к .box, превращая его во flex-контейнер, а затем задаём значения flex-wrap и flex-line-count, чтобы дочерние flex-элементы равномерно переносились как минимум на три flex-строки. Значения можно изменить в интерактивном примере. Мы также задаём дочерним flex-элементам значение flex 1 1 150px, чтобы их базовая ширина составляла 150px, а оставшееся пространство равномерно распределялось между элементами в одной flex-строке.
.box {
display: flex;
flex-wrap: wrap balance;
flex-line-count: 3;
}
.box > * {
flex: 1 1 150px;
}
.box {
width: 100%;
border: 2px dotted rgb(96 139 168);
gap: 10px;
}
.box > * {
border: 2px solid rgb(96 139 168);
border-radius: 5px;
background-color: rgb(96 139 168 / 0.2);
}
* {
box-sizing: border-box;
}
body {
padding: 10px 30px;
}
@supports not (flex-wrap: balance) {
body::before {
content: "Your browser does not support flex-wrap: balance.";
background-color: wheat;
text-align: center;
padding: 1rem 0;
z-index: 1;
position: fixed;
inset: 40% 0 auto;
}
}
Для краткости остальная часть CSS скрыта.
const boxElem = document.querySelector(".box");
const outputElem = document.querySelector("output");
const pCodeElem = document.querySelector("p code");
const reverseInput = document.getElementById("reverse");
const balanceInput = document.getElementById("balance");
const lineCountInput = document.getElementById("line-count");
let wrapValue = "wrap";
let lineCountValue = "3";
function updateCurrentlySet() {
pCodeElem.textContent = `flex-wrap: ${wrapValue}; flex-line-count: ${lineCountValue};`;
}
function setFlexWrap() {
wrapValue = "";
if (reverseInput.checked) {
wrapValue += "wrap-reverse";
} else {
wrapValue += "wrap";
}
if (balanceInput.checked) {
wrapValue += " balance";
}
boxElem.style.flexWrap = wrapValue;
updateCurrentlySet();
}
function setFlexLineCount() {
lineCountValue = lineCountInput.value;
boxElem.style.flexLineCount = lineCountValue;
outputElem.textContent = lineCountValue;
updateCurrentlySet();
}
reverseInput.addEventListener("change", setFlexWrap);
balanceInput.addEventListener("change", setFlexWrap);
lineCountInput.addEventListener("input", setFlexLineCount);
Результат
Измените настройки элементов управления, чтобы увидеть, как они влияют на результат. Обратите внимание, что:
- Переключение между
wrapиwrap-reverseменяет направление расположения flex-строк вдоль поперечной оси. - Значение
balanceприводит к равномерному распределению flex-элементов по доступным flex-строкам. - Изменение значения
flex-line-countменяет минимальное число строк, по которым будут распределены элементы. Свойствоflex-line-count, а значит, и ползунок, не влияют на результат, если флажокbalanceне установлен. - По умолчанию flex-элементы распределены по четырём flex-строкам, поэтому изменение
flex-line-countна значение меньше5не даст эффекта. Значения от5до10добавляют ещё одну flex-строку. - Поскольку flex-элементов 10, значения
flex-line-count, равные10или больше, дают одинаковый результат: по одному элементу будет размещено в каждой из 10 flex-строк.
Спецификации
Совместимость с браузерами
| Настольные компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome для Android | Firefox для Android | Opera для Android | Safari на iOS | Samsung Internet | Android WebView | WebView на iOS | |
flex-wrap |
29
21
|
12 |
28 |
16
15
|
9
7
|
29
25
|
28 |
16
14
|
9
7
|
2.0
1.5
|
4.4
4.4
|
9
7
|
balance |
150 |
150 |
Нет |
134 |
Нет |
150 |
Нет |
101 |
Нет |
Нет |
150 |
Нет |
nowrap |
21 |
12 |
28 |
15 |
7 |
25 |
28 |
14 |
7 |
1.5 |
4.4 |
7 |
wrap |
21 |
12 |
28 |
15 |
7 |
25 |
28 |
14 |
7 |
1.5 |
4.4 |
7 |
wrap-reverse |
21 |
12 |
28 |
15 |
7 |
25 |
28 |
14 |
7 |
1.5 |
4.4 |
7 |
См. также
flex-direction-
Сокращённое свойство
flex-flow - Основные понятия flexbox
- Освоение переноса flex-элементов
- Модуль гибкой раскладки 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/flex-wrap