flex
Властивість-скорочення CSS flex
(гнутися) задає те, як гнучкий елемент зростатиме чи скорочуватиметься для заповнення доступного в гнучкому контейнері простору.
Спробуйте його в дії
Складові властивості
Ця властивість є скороченням наступних властивостей CSS:
Синтаксис
/* Значення – ключові слова */
flex: auto;
flex: initial;
flex: none;
/* Одне значення, число без одиниць вимірювання: flex-grow
flex-basis у такому разі дорівнює 0. */
flex: 2;
/* Одне значення, ширина чи висота: flex-basis */
flex: 10em;
flex: 30%;
flex: min-content;
/* Два значення: flex-grow | flex-basis */
flex: 1 30px;
/* Два значення: flex-grow | flex-shrink */
flex: 2 2;
/* Три значення: flex-grow | flex-shrink | flex-basis */
flex: 2 2 10%;
/* Глобальні значення */
flex: inherit;
flex: initial;
flex: revert;
flex: revert-layer;
flex: unset;
Властивість flex
може бути задана у вигляді одного, двох чи трьох значень.
-
Синтаксис одного значення: значення мусить бути одним з таких варіантів:
- дійсне для
<flex-grow>
значення: тоді скорочення розгортається якflex: <flex-grow> 1 0
. - дійсне для
<flex-basis>
значення: тоді скорочення розгортається якflex: 1 1 <flex-basis>
. - ключове слово
none
, або одне з глобальних ключових слів.
- дійсне для
-
Синтаксис двох значень:
-
Перше значення мусить бути:
<number>
– тлумачиться як<flex-grow>
.
-
Друге значення мусить бути одним з таких варіантів:
- дійсне для
flex-shrink
значення: тоді скорочення розгортається якflex: <flex-grow> <flex-shrink> 0
. - дійсне для
flex-basis
значення: тоді скорочення розгортається якflex: <flex-grow> 1 <flex-basis>
.
- дійсне для
-
-
Синтаксис трьох значень: значення мусять бути в наступному порядку:
- дійсне для
flex-grow
значення. - дійсне для
flex-shrink
значення. - дійсне для
flex-basis
значення.
- дійсне для
Значення
initial
Елемент калібрується згідно зі своїми властивостями
width
іheight
. Він скорочується до свого мінімального розміру, аби вміститись у контейнер, але не росте для захоплення доступного в гнучкому контейнері вільного простору. Це рівносильно заданню "flex: 0 1 auto
".auto
Елемент калібрується згідно зі своїми властивостями
width
іheight
, але росте для захоплення доступного в гнучкому контейнері вільного простору, а також скорочується до свого мінімального розміру, аби в контейнері поміститися. Це рівносильно заданню "flex: 1 1 auto
".none
Елемент калібрується згідно зі своїми властивостями
width
іheight
. Він геть негнучкий: і не скорочується, і не росте щодо гнучкого контейнера. Це рівносильно заданню "flex: 0 0 auto
".<'flex-grow'>
Визначає
flex-grow
гнучкого елемента. Від'ємні значення вважаються недійсними. Коли упущено – вважається1
. (початкове значення –0
)<'flex-shrink'>
Визначає
flex-shrink
гнучкого елемента. Від'ємні значення вважаються недійсними. Коли упущено – вважається1
. (початкове значення –1
)<'flex-basis'>
Визначає
flex-basis
гнучкого елемента. Значення0
мусить мати одиниці вимірювання, щоб не тлумачитись як гнучкість. Коли упущено – вважається0
. (початкове значення –auto
)
Опис
У більшості випадків розробники повинні давати flex
одне з наступних значень: auto
, initial
, none
чи додатне число без одиниць вимірювання. Аби побачити в дії ці значення, спробуйте змінити розмір гнучких контейнерів нижче:
Усталено гнучкі елементи не скорочуються до розмірів, менших за їх мінімальний розмір вмісту. Щоб це змінити, треба задати елементові min-width
чи min-height
.
Формальне визначення
Початкове значення | так як і всі інші властивості зі скорочення:
|
---|---|
Успадковується | ні |
Обчислене значення | так як і всі інші властивості зі скорочення:
|
Формальний синтаксис
none | [ <\'flex-grow\'> <\'flex-shrink\'>? || <\'flex-basis\'> ]
Приклади
flex: auto
Цей приклад демонструє те, як гнучкий елемент із flex: auto
зростає, щоб зайняти вільний простір у контейнері.
HTML
<div id="flex-container">
<div id="flex-auto">
flex: auto (клацніть, аби показати чи прибрати звичайний елемент)
</div>
<div id="flex-initial">flex: initial</div>
</div>
CSS
#flex-container {
display: flex;
font-family: Consolas, Arial, sans-serif;
}
#flex-container > div {
padding: 1rem;
}
#flex-auto {
flex: auto;
border: 1px solid #f00;
}
#flex-initial {
border: 1px solid #000;
}
JavaScript
const flexAuto = document.getElementById("flex-auto");
const flexInitial = document.getElementById("flex-initial");
flexAuto.addEventListener("click", () => {
flexInitial.style.display =
flexInitial.style.display === "none" ? "block" : "none";
});
Результат
Цей гнучкий контейнер вміщає два гнучкі елементи:
Елемент "flex: initial" займає стільки простору, скільки вимагає його ширина, але не розширюється, щоб зайняти більше. Весь вільний простір займає "flex: auto".
Коли клацнути "flex: auto", елемент "flex: initial" отримує властивість display
зі значенням none
, що прибирає його з макета. Потім елемент "flex: auto" розширюється, щоб зайняти ввесь доступний в контейнері простір.
Специфікації
Сумісність із браузерами
desktop | mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
flex
|
Chrome Full support 29 | Edge Full support 12 | Firefox Full support 20 | Internet Explorer Full support 11 | Opera Full support 12.1 | Safari Full support 9 | WebView Android Full support 4.4 | Chrome Android Full support 29 | Firefox for Android Full support 20 | Opera Android Full support 12.1 | Safari on iOS Full support 9 | Samsung Internet Full support 2.0 |
See also
- Посібник зі флексбокса CSS: Базові концепції флексбоксу
- Посібник зі флексбокса CSS: Контролювання співвідношень гнучких елементів за головною віссю