flex
Базовая линия Широко доступна
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с сентября 2015 года.
Свойство flex CSS сокращенного свойства определяет, как элемент flex-элемент будет расти или уменьшаться, чтобы заполнить доступное пространство в контейнере flex.
Попробовать
Составные свойства
Это свойство является сокращением следующих свойств CSS:
Синтаксис
/* Keyword value */ flex: none; /* 0 0 auto */ /* One value, unitless number: flex-grow flex-basis is then equal to 0%. */ flex: 2; /* 2 1 0% */ /* One value, width/height: flex-basis */ flex: auto; /* 1 1 auto */ flex: 10em; /* 1 1 10em */ flex: 30%; flex: min-content; /* Two values: flex-grow | flex-basis */ flex: 1 30px; /* 1 1 30px */ /* Two values: flex-grow | flex-shrink */ flex: 2 2; /* 2 2 0% */ /* Three values: flex-grow | flex-shrink | flex-basis */ flex: 2 2 10%; /* Global values */ flex: inherit; flex: initial; /* 0 1 auto */ flex: revert; flex: revert-layer; flex: unset;
Свойство flex может быть задано с одним, двумя или тремя значениями.
-
Синтаксис с одним значением: значение должно быть одним из:
- валидное значение для
<flex-grow>: тогда во всех браузерах сокращенное свойство расширяется доflex: <flex-grow> 1 0%. Однако спецификация гласит, что оно должно расширяться доflex: <flex-grow> 1 0. - валидное значение для
<flex-basis>: тогда сокращенное свойство расширяется доflex: 1 1 <flex-basis>. - ключевое слово
noneили одно из глобальных ключевых слов.
- валидное значение для
-
Синтаксис с двумя значениями:
-
Первое значение должно быть валидным значением для
flex-grow. -
Второе значение должно быть одним из:
- валидное значение для
flex-shrink: тогда во всех браузерах сокращенное свойство расширяется доflex: <flex-grow> <flex-shrink> 0%. - валидное значение для
flex-basis: тогда сокращенное свойство расширяется доflex: <flex-grow> 1 <flex-basis>.
- валидное значение для
-
-
Синтаксис с тремя значениями: значения должны быть в следующем порядке:
- валидное значение для
flex-grow. - валидное значение для
flex-shrink. - валидное значение для
flex-basis.
- валидное значение для
Значения
<'flex-grow'>-
Определяет
flex-growflex-элемента. Отрицательные значения считаются невалидными. По умолчанию1(если опущено. Изначальное значение0). <'flex-shrink'>-
Определяет
flex-shrinkflex-элемента. Отрицательные значения считаются невалидными. По умолчанию1(если опущено. Изначальное значение1). <'flex-basis'>-
Определяет
flex-basisflex-элемента. По умолчанию0%(если опущено). Начальное значениеauto. none-
Элемент масштабируется в соответствии с его свойствами
widthиheight. Он полностью негибкий: он не уменьшается и не увеличивается относительно контейнера flex. Это эквивалентно установкеflex: 0 0 auto.
Часто используемые эффекты flexbox можно получить, используя следующие flex значения:
-
initial: flex-элемент не увеличивается, но может уменьшаться. Это значение по умолчанию расширяется доflex: 0 1 auto. Элемент масштабируется в соответствии с его свойствамиwidthилиheightв зависимости отflex-direction. Если доступное пространство отрицательное, элемент уменьшится до своего минимального размера, чтобы поместиться в контейнер, но не будет увеличиваться, чтобы заполнить любое положительное пространство, доступное в контейнере flex. -
auto: flex-элемент может увеличиваться и уменьшаться. Это значение расширяется доflex: 1 1 auto. Элемент масштабируется в соответствии с его свойствамиwidthилиheightв зависимости отflex-direction, но увеличивается, чтобы заполнить доступное положительное пространство в контейнере flex или уменьшается до своего минимального размера, чтобы поместиться в контейнер в случае отрицательного пространства. flex-элемент полностью гибкий. -
none: flex-элемент ни увеличивается, ни уменьшается. Это значение расширяется доflex: 0 0 auto. Элемент масштабируется в соответствии с его свойствамиwidthилиheightв зависимости от направления контейнера flex. flex-элемент полностью негибкий. -
flex: <number [1,∞]>: Основной размер flex-элемента будет пропорционален заданному числу. Это значение расширяется доflex: <number> 1 0. Это устанавливаетflex-basisв ноль и делает flex-элемент гибким. Элемент будет по крайней мере таким же широким или высоким, как его минимальный размер, при этом доступное положительное пространство контейнера будет пропорционально распределяться в зависимости от коэффициентов роста этого элемента и его элементов flex-потомков. Если все элементы flex используют этот шаблон, все будут масштабироваться пропорционально своим числовым значениям.Предупреждение: браузеры используют значение
flex-basis0%, когдаflex-basisне указано в значенииflex. Это не то же самое, что значениеflex-basis0, что указано в спецификации. Это может повлиять на макет flex в некоторых случаях. См. демонстрацию этого эффекта в примере Flex-basis0против0%.
Описание
В большинстве случаев авторам следует устанавливать flex в одно из следующих значений: auto, initial, none, или положительное безразмерное число. Чтобы увидеть эффект этих значений, попробуйте изменить размер контейнеров flex ниже:
По умолчанию flex-элементы не уменьшаются ниже своего размера min-content. Чтобы изменить это, установите для элемента свойства min-width или min-height.
Формальное определение
| Начальное значение | как каждое из свойств сокращенного свойства:
|
|---|---|
| Применяется к | flex-элементам, включая псевдоэлементы в потоке |
| Наследуется | нет |
| Вычисленное значение | как каждое из свойств сокращенного свойства:
|
| Тип анимации | как каждое из свойств сокращенного свойства:
|
Формальный синтаксис
flex =
none |
[ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
<flex-grow> =
<number [0,∞]>
<flex-shrink> =
<number [0,∞]>
<flex-basis> =
content |
<'width'>
<width> =
auto |
<length-percentage [0,∞]> |
min-content |
max-content |
fit-content( <length-percentage [0,∞]> ) |
<calc-size()> |
<anchor-size()>
<length-percentage> =
<length> |
<percentage>
<calc-size()> =
calc-size( <calc-size-basis> , <calc-sum> )
<anchor-size()> =
anchor-size( [ <anchor-name> || <anchor-size> ]? , <length-percentage>? )
<calc-size-basis> =
<intrinsic-size-keyword> |
<calc-size()> |
any |
<calc-sum>
<calc-sum> =
<calc-product> [ [ '+' | '-' ] <calc-product> ]*
<anchor-name> =
<dashed-ident>
<anchor-size> =
width |
height |
block |
inline |
self-block |
self-inline
<calc-product> =
<calc-value> [ [ '*' | '/' ] <calc-value> ]*
<calc-value> =
<number> |
<dimension> |
<percentage> |
<calc-keyword> |
( <calc-sum> )
<calc-keyword> =
e |
pi |
infinity |
-infinity |
NaN
Примеры
Настройка flex: auto
Этот пример демонстрирует, как элемент flex с flex: auto увеличивается, чтобы занять всё свободное пространство в контейнере.
HTML
<div id="flex-container">
<div id="flex-auto">
flex: auto (click to remove/add the `flex: initial` box)
</div>
<div id="default">flex: initial</div>
</div>
CSS
#flex-container {
border: 2px dashed gray;
display: flex;
}
#flex-auto {
cursor: pointer;
background-color: wheat;
flex: auto;
}
#default {
background-color: lightblue;
}
JavaScript
const flexAutoItem = document.getElementById("flex-auto");
const defaultItem = document.getElementById("default");
flexAutoItem.addEventListener("click", () => {
defaultItem.style.display =
defaultItem.style.display === "none" ? "block" : "none";
});
Результат
Контейнер flex содержит два элемента flex:
- Элемент
#flex-autoимеет значениеflexравноеauto. Значениеautoрасширяется до1 1 auto, т.е. элементу разрешено расширяться. - Элемент
#defaultне имеет заданного значенияflex, поэтому он использует значение по умолчаниюinitial. Значениеinitialрасширяется до0 1 auto, т.е. элементу не разрешено расширяться.
Элемент #default занимает столько места, сколько ему нужно по ширине, но не расширяется, чтобы занять больше места. Всё оставшееся пространство занимает элемент #flex-auto.
При нажатии на элемент #flex-auto мы устанавливаем свойство элемента #default display в значение none, удаляя его из макета. Элемент #flex-auto затем расширяется, чтобы занять всё доступное пространство в контейнере. Нажатие на элемент #flex-auto снова добавляет элемент #default в контейнер.
Спецификации
Совместимость с браузерами
| Рабочий стол | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
flex |
2921 | 1212 |
20["С Firefox 28 поддерживается многострочный flexbox.", "До Firefox 32 Firefox не мог анимировать значения, начинающиеся или заканчивающиеся на0.", "До Firefox 61, размер элементов flex, определяемых содержимым, рассчитывался с помощью fit-content, а не max-content."] |
12.1 | 97 | 2925 |
20["С Firefox 28 поддерживается многострочный flexbox.", "До Firefox 32 Firefox не мог анимировать значения, начинающиеся или заканчивающиеся на0.", "До Firefox 61, размер элементов flex, определяемых содержимым, рассчитывался с помощью fit-content, а не max-content."] |
12.1 | 97 | 2.01.5 | 4.44.4 |
none |
21 | 12 | ≤72 | 15 | 7 | 25 | 79 | 14 | 7 | 1.5 | 4.4 |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/flex