flex-basis
Властивість CSS flex-basis (основа гнучкості) задає початкову основну розмірність гнучкого елемента. Вона задає розмір рамки вмісту, якщо у box-sizing не задано щось інше.
[!NOTE] Радять використовувати скорочення
flex, а не окремі оголошенняflex-grow,flex-shrinkіflex-basis. Тут вони розділені, адже цей документ про одну зі складових скорочення – властивістьflex-basis.
Спробуйте його в дії
У цьому прикладі як властивість flex-grow, так і властивість flex-shrink мають значення 1 на всіх трьох елементах, що означає те, що гнучкі елементи можуть збільшуватися і зменшуватися відносно початкового значення flex-basis.
Це демо змінює значення flex-basis на першому гнучкому елементі, завдяки чому він зростає або скорочується для заповнення доступного простору. Інші гнучкі елементи також змінюють розмір, вони щонайменше мають розмір min-content. Наприклад, коли flex-basis першого елемента отримує значення 200px, то він починає від 200px, але потім скорочується для заповнення доступного простору.
Якщо flex-basis має значення, відмінне від auto, і для того самого гнучкого елемента задано width (або, у випадку flex-direction: column, height), то значення flex-basis має пріоритет.
Синтаксис
/* Задати <'width'> */
flex-basis: 10em;
flex-basis: 3px;
flex-basis: 50%;
flex-basis: auto;
/* Ключові слова природного розміру */
flex-basis: max-content;
flex-basis: min-content;
flex-basis: fit-content;
/* Задати розмір автоматично на основі вмісту гнучкого елемента */
flex-basis: content;
/* Глобальні значення */
flex-basis: inherit;
flex-basis: initial;
flex-basis: revert;
flex-basis: revert-layer;
flex-basis: unset;
Властивість flex-basis задається або ключовим словом content, або значенням <'width'>.
Значення
<'width'>Будь-яка з наступних одиниць вимірювання:
<length>задає абсолютне значення.<percentage>задає відсотки ширини або висоти області вмісту контейнерного блоку. Відсоткові значенняflex-basisвирішуються відносно гнучкого контейнера. Якщо розмір гнучкого контейнера не є скінченним, то вжите значенняflex-basis–content.autoвикористовує значенняwidthза горизонтального письма та значенняheightза вертикального; коли відповідне значення такожauto, замість нього використовується значенняcontent.max-contentзадає бажану природну ширину.min-contentзадає мінімальну природну ширину.fit-contentзадає максимально можливий розмір області вмісту контейнерного блока, обмежену значеннямиmin-contentіmax-content, що обчислюється на основі вмісту поточного елемента.
contentВказує на автоматичне визначення розміру на основі вмісту гнучкого елемента.
Формальне визначення
| Початкове значення | auto |
|---|---|
| Успадковується | ні |
| Обчислене значення | as specified, but with relative lengths converted into absolute lengths |
Формальний синтаксис
content | <\'width\'>
Приклади
Задання початкових розмірів гнучких елементів
HTML
<ul class="container">
<li class="flex flex1">1: перевірка flex-basis</li>
<li class="flex flex2">2: перевірка flex-basis</li>
<li class="flex flex3">3: перевірка flex-basis</li>
<li class="flex flex4">4: перевірка flex-basis</li>
<li class="flex flex5">5: перевірка flex-basis</li>
</ul>
<ul class="container">
<li class="flex flex6">6: перевірка flex-basis</li>
</ul>
CSS
.container {
font-family: arial, sans-serif;
margin: 0;
padding: 0;
list-style-type: none;
display: flex;
flex-wrap: wrap;
}
.flex {
background: #6ab6d8;
padding: 10px;
margin-bottom: 50px;
border: 3px solid #2e86bb;
color: white;
font-size: 14px;
text-align: center;
position: relative;
}
.flex::after {
position: absolute;
z-index: 1;
left: 0;
top: 100%;
margin-top: 10px;
width: 100%;
color: #333;
font-size: 12px;
}
.flex1 {
flex-basis: auto;
}
.flex1::after {
content: "auto";
}
.flex2 {
flex-basis: max-content;
}
.flex2::after {
content: "max-content";
}
.flex3 {
flex-basis: min-content;
}
.flex3::after {
content: "min-content";
}
.flex4 {
flex-basis: fit-content;
}
.flex4::after {
content: "fit-content";
}
.flex5 {
flex-basis: content;
}
.flex5::after {
content: "content";
}
Результати
Основа гнучкості 0 і 0%
Цей приклад демонструє різницю між flex-basis 0 і flex-basis 0%, коли flex-direction має значення column, а гнучкі контейнери та гнучкі елементи не мають заданої висоти; коли 0 – це абсолютна величина, то відсоткові значення flex-basis вирішуються до значень content
HTML
Додаються два гнучкі контейнери з однаковою структурою, які стилізуються подібно, коли не рахувати їхніх значень flex-basis. В кожному контейнері по два безпосередні нащадки: заголовок <div> і <section>. Елемент <section> має дочірній <div> із вмістом, який не заданий як гнучкий елемент, а має задану висоту.
<div class="container basis-0">
<div>заголовок</div>
<section>
flex-basis: 0;
<div class="content"></div>
</section>
</div>
<div class="container basis-0-percent">
<div>заголовок</div>
<section>
flex-basis: 0%;
<div class="content"></div>
</section>
</div>
CSS
Контейнери стилізуються як рядні гнучкі контейнери, що з'являються поруч, аби їх зручніше було порівнювати. Властивості flex-direction задається column. Гнучкі елементи першого контейнера мають значення flex-basis 0, а другого – 0%. Ані гнучкі контейнери, ані їхні гнучкі елементи не мають явно заданої висоти, проте висота елементів section не може перевищувати 200px, а їхні дочірні елементи мають висоту 300px.
.container {
width: 40vw;
padding: 1rem;
border: 1px dashed blue;
display: inline-flex;
flex-direction: column;
}
section {
border: 1px solid red;
overflow: auto;
min-height: 200px;
}
.content {
background: wheat;
height: 300px;
}
.container.basis-0 > * {
flex-basis: 0;
}
.container.basis-0-percent > * {
flex-basis: 0%;
}
Результати
У першому контейнері, де flex-basis: 0, елемент <section> має початковий головний розмір нуля, але зростає до граничної висоти 200px. У другому контейнері, де flex-basis: 0%, елемент <section> має початковий головний розмір 300px, тому що, оскільки гнучкий контейнер не має заданої висоти, відсоткові значення flex-basis вирішуються до значення content.
Специфікації
Сумісність із браузерами
| desktop | mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
flex-basis
|
Chrome Full support 29 | Edge Full support 12 | Firefox Full support 22 | 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 22 | Opera Android Full support 12.1 | Safari on iOS Full support 9 | Samsung Internet Full support 2.0 |
auto
|
Chrome Full support 22 | Edge Full support 12 | Firefox Full support 22 | Internet Explorer Full support 11 | Opera Full support 12.1 | Safari Full support 9 | WebView Android Full support 37 | Chrome Android Full support 25 | Firefox for Android Full support 22 | Opera Android Full support 12.1 | Safari on iOS Full support 9 | Samsung Internet Full support 1.5 |
content
|
Chrome Full support 94 | Edge Full support 94 | Firefox Full support 61 | Internet Explorer No support Ні | Opera Full support 80 | Safari Попередній перегляд браузерної підтримки TP | WebView Android Full support 94 | Chrome Android Full support 94 | Firefox for Android Full support 61 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet Full support 17.0 |
fit-content
|
Chrome Full support 94 | Edge Full support 94 | Firefox Full support 94 | Internet Explorer No support Ні | Opera Full support 80 | Safari No support Ні | WebView Android Full support 94 | Chrome Android Full support 94 | Firefox for Android Full support 94 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet Full support 17.0 |
max-content
|
Chrome Full support 94 | Edge Full support 94 | Firefox Full support 66 | Internet Explorer No support Ні | Opera Full support 80 | Safari No support Ні | WebView Android Full support 94 | Chrome Android Full support 94 | Firefox for Android Full support 66 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet Full support 17.0 |
min-content
|
Chrome Full support 94 | Edge Full support 94 | Firefox Full support 66 | Internet Explorer No support Ні | Opera Full support 80 | Safari No support Ні | WebView Android Full support 94 | Chrome Android Full support 94 | Firefox for Android Full support 66 | Opera Android No support Ні | Safari on iOS No support Ні | Samsung Internet Full support 17.0 |