Свойство CSS `flex-grow`
Базовая поддержка Широко доступно
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в разных версиях браузеров. Она доступна во всех браузерах с сентября 2015 года.
Свойство flex-grow CSS задаёт коэффициент роста flex-элемента, который определяет, какая часть положительного свободного пространства контейнера flex, если оно есть, должна быть выделена основному размеру flex-элемента.
Когда основной размер flex-контейнера больше суммарных основных размеров его flex-элементов, это положительное свободное пространство можно распределить между flex-элементами. При этом рост каждого элемента будет пропорционален его значению коэффициента роста относительно суммы коэффициентов роста всех flex-элементов.
Примечание: Рекомендуется использовать сокращённое свойство flex с ключевым словом, например auto или initial, вместо того чтобы задавать flex-grow отдельно. Ключевые слова разворачиваются в надёжные сочетания flex-grow, flex-shrink и flex-basis, которые помогают добиться обычно желаемого поведения flex-элементов.
Попробуйте
flex-grow: 1;
flex-grow: 2;
flex-grow: 3;
<section class="default-example" id="default-example"> <div class="transition-all" id="example-element">I grow</div> <div>Item Two</div> <div>Item Three</div> </section>
.default-example {
border: 1px solid #c5c5c5;
width: auto;
max-height: 300px;
display: flex;
}
.default-example > div {
background-color: rgb(0 0 255 / 0.2);
border: 3px solid blue;
margin: 10px;
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
}
Синтаксис
/* <number> values */ flex-grow: 3; flex-grow: 0.6; /* Global values */ flex-grow: inherit; flex-grow: initial; flex-grow: revert; flex-grow: revert-layer; flex-grow: unset;
Значения
Это свойство задаётся следующим значением:
-
<number> - См.
<number>. Отрицательные значения недопустимы. По умолчанию — 0, что предотвращает рост flex-элемента.
Описание
Это свойство определяет, какая часть оставшегося пространства в flex-контейнере должна быть выделена элементу (коэффициент роста flex-элемента).
Основным размером является ширина или высота элемента в зависимости от значения flex-direction.
Оставшееся пространство, или положительное свободное пространство, — это размер flex-контейнера за вычетом суммарных размеров всех flex-элементов. Если у всех соседних элементов одинаковый коэффициент роста, каждый из них получит одинаковую долю оставшегося пространства. Обычно задают flex-grow: 1, но установка коэффициента роста всех flex-элементов в 88, 100, 1.2 или любое другое значение больше 0 даст тот же результат: значение представляет собой отношение.
Если значения flex-grow различаются, положительное свободное пространство распределяется в соответствии с отношением, заданным разными коэффициентами роста. Значения коэффициента flex-grow всех соседних flex-элементов складываются. Затем положительное свободное пространство flex-контейнера, если оно есть, делится на эту сумму. Основной размер каждого flex-элемента со значением flex-grow больше 0 увеличивается на частное, умноженное на собственный коэффициент роста элемента.
Например, если в контейнере 700px находятся четыре flex-элемента размером 100px, а коэффициенты flex-grow этих flex-элементов равны соответственно 0, 1, 2 и 3, суммарный основной размер четырёх элементов составляет 400px, то есть остаётся 300px положительного свободного пространства для распределения. Сумма четырёх коэффициентов роста (0 + 1 + 2 + 3 = 6) равна шести. Следовательно, на каждый коэффициент роста приходится 50px ((300px / 6 ). Каждый flex-элемент получает 50px свободного пространства, умноженные на его коэффициент flex-grow, то есть 0, 50px, 100px и 150px соответственно. Итоговые размеры flex-элементов составляют 100px, 150px, 200px и 250px соответственно.
Свойство flex-grow обычно используется вместе с другими сокращёнными свойствами flex: flex-shrink и flex-basis. Рекомендуется использовать сокращённое свойство flex, чтобы задать все значения.
Формальное определение
| Начальное значение | 0 |
|---|---|
| Применяется к | flex-элементам, включая псевдоэлементы в потоке |
| Наследуется | нет |
| Вычисленное значение | как задано |
| Тип анимации | a <a href="/en-US/docs/Web/CSS/Reference/Values/number#interpolation" title="Значения типа данных CSS <number> интерполируются как действительные числа с плавающей запятой.">number</a> |
Формальный синтаксис
flex-grow =
<number>
Примеры
Задание коэффициента роста flex-элемента
В этом примере сумма шести коэффициентов роста равна восьми, то есть на каждое значение коэффициента роста приходится 12.5% оставшегося пространства.
HTML
<h1>This is a <code>flex-grow</code> example</h1> <p> A, B, C, and F have <code>flex-grow: 1</code> set. D and E have <code>flex-grow: 2</code> set. </p> <div id="content"> <div class="box1">A</div> <div class="box2">B</div> <div class="box3">C</div> <div class="box4">D</div> <div class="box5">E</div> <div class="box6">F</div> </div>
CSS
#content {
display: flex;
}
div > div {
border: 3px solid rgb(0 0 0 / 20%);
}
.box1,
.box2,
.box3,
.box6 {
flex-grow: 1;
}
.box4,
.box5 {
flex-grow: 2;
border: 3px solid rgb(0 0 0 / 20%);
}
.box1 {
background-color: red;
}
.box2 {
background-color: lightblue;
}
.box3 {
background-color: yellow;
}
.box4 {
background-color: brown;
}
.box5 {
background-color: lightgreen;
}
.box6 {
background-color: brown;
}
Результат
Когда шесть flex-элементов распределяются вдоль главной оси контейнера, если сумма основного содержимого этих flex-элементов меньше размера главной оси контейнера, дополнительное пространство распределяется между flex-элементами: A, B, C и F получают по 12.5% оставшегося пространства, а D и E получают по 25% дополнительного пространства.
Спецификации
Совместимость с браузерами
| Компьютеры | Мобильные устройства | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | |
flex-grow |
29
22
|
12
12
|
20Начиная с Firefox 28 поддерживается многострочная flex-разметка. |
12.1
15
|
9
7
|
29
25
|
20Начиная с Firefox for Android 28 поддерживается многострочная flex-разметка. |
12.1
14
|
9
7
|
2.0
1.5
|
4.4
4.4
|
9
7
|
less_than_zero_animate |
49 |
79 |
32До Firefox 32 браузер не мог анимировать значения, начинающиеся или заканчивающиеся на0. |
36 |
Нет |
49 |
32До Firefox for Android 32 браузер Firefox for Android не мог анимировать значения, начинающиеся или заканчивающиеся на0. |
36 |
Нет |
5.0 |
49 |
Нет |
См. также
-
Сокращённое свойство
flex - Основные понятия Flexbox
- Управление соотношениями flex-элементов вдоль главной оси
- Модуль гибкой блочной раскладки CSS
-
flex-grow— странная штука. Или нет? на CSS-Tricks (2017)
© 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-grow