CSS flex — скорочення для flex-grow, flex-shrink і flex-basis
Властивість flex дозволяє вказати параметри елемента, щоб він ефективно заповнював доступний простір. Елементи можуть бути розтягнуті пропорційно з урахуванням заданого співвідношення або стиснуті, щоб цілком вмістити всі елементи без переносів в один рядок.

Властивість flex — універсальна властивість, яка дозволяє одночасно задати наступні значення:
flex-growflex-shrinkflex-basis
У гнучкому контейнері, нащадки можуть бути розташовані у будь-якому напрямку, і можуть змінювати власні розміри: збільшуватися, щоб заповнити батьківський елемент, або зменшуватися, щоб не вилізти за його межі.
За змовчуванням нащадки не можуть бути меншими, ніж їхній вміст. Щоб змінити це, використовуйте властивості min-width i max-width.
Загальний опис
автор: NagarD
- Нотатка
-
Властивість 'flex' працює тільки з гумовими елементами, тобто з тими елементами, у котрих властивість 'display' встановлена як
автор: Svitlanaflex(display: flex;абоdisplay: inline-flex;). - Нотатка
-
Рекомендується застосовувати властивість
автор: Svitlanaflexдля скороченого запису, а неflex-grow,flex-shrinkіflex-basisокремо. Тому що це робить стилі коротшими, зрозумілішими, а також тому, що універсальна властивість правильно скидає значення не заданих властивостей до початкового (без задання). - Нотатка
-
Якщо для властивості задати одне чи два ключових слова,
автор: Svitlanaflex-basisавтоматично змінює своє значення зautoдо0.
Синтаксис
flex: flex-grow flex-shrink flex-basis|auto|initial|inherit;
Властивість flex може отримувати 7 значень:
-
flex-grow -
Число, яке вказує пропорції флекс елемента всередині контейнера.
автор: Svitlana -
flex-shrink -
Число, яке вказує коефіцієнт стиснення флексів в контейнері.
автор: Svitlana -
flex-basis -
Початкова довжина елемента. Можна вибрати зі значень
автор: Svitlanaauto,inherit,%,px,emабо будь-яку іншу одиницю виміру довжини -
auto -
Те ж, що й
автор: Svitlana1 1 auto -
initial -
Те ж, що й
автор: Svitlana0 1 auto -
none -
Встановлює значення властивості у значення без задання.
автор: Svitlana -
inherit -
Успадковує властивість від свого батьківського елемента
автор: Svitlana
| Значення без задання: | 0 1 auto |
|---|---|
| Наслідує: | Ні |
| Анімується: | Так |
| JavaScript синтаксис: | object.style.flex="1" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 22 | 9 | 12.1 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 22 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
Інструмент
Показує, як властивості флекс-контейнера розставляють елементи.
Пісочниця Flexbox — окремою сторінкою, з поясненням пасток.
У кожного елемента flex: 1 — вільний простір ділиться порівну, тож усі три колонки однакової ширини незалежно від довжини вмісту.
HTML
<div id="main">
<div>короткий</div>
<div>значно довший вміст усередині</div>
<div>середній текст</div>
</div>
CSS
#main {
display: flex;
}
#main div {
flex: 1;
padding: 8px;
border: 1px solid #0172ad;
}
HTML
<p>Цей приклад показує як працює властивість <code>flex</code>. Змінюйте значення для під-властивостей нижче, щоб змінити відображення виділеного нащадка в контейнері нижче.</p>
<hr>
<strong>flex-grow: </strong>
<input type="number" class="input" min="0" id="grow" value="1">
<strong>;</strong><br><br>
<strong>flex-shrink: </strong>
<input type="number" class="input" min="0" id="shrink" value="2">
<strong>;</strong><br><br>
<strong>flex-basis: </strong>
<input type="number" class="input" id="basis" value="100">px
<strong>;</strong><br><br>
<hr>
<div class="box">
<div class="child one">flex: 1 1 100px;</div>
<div class="child hl">flex: 1 2 100px;</div>
<div class="child two">flex: 2 1 100px;</div>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
font-family: system-ui, sans-serif;
}
.child {
padding: 50px 8px 8px 8px;
background-color: gold;
font-size: 80%;
transition: flex .15s ease-in 0s;
border-left: 4px solid #dcdcdc;
font-family: monospace;
text-align: center;
}
.child:first-child {
border-left: 0;
}
.child.one {
flex: 1 1 100px;
}
.child.hl {
flex: 1 2 100px;
background-color: #F74C32;
}
.child.two {
flex: 2 1 100px;
}
message {
display: none;
}
.wm {
min-height: 100px;
}
.box {
width: 100%;
height: 150px;
background-color: #dcdcdc;
padding: 16px;
display: flex;
}
hr {
margin-bottom: 16px;
}
JS
document.querySelectorAll('.input').forEach((el) => el.addEventListener('change', function () {
var grow = document.querySelector('#grow').value;
var shrink = document.querySelector('#shrink').value;
var basis = document.querySelector('#basis').value;
document.querySelectorAll('.child.hl').forEach((n) => n.style.setProperty('flex', grow + ' ' + shrink + ' ' + basis + 'px'));
document.querySelectorAll('.child.hl').forEach((n) => n.innerHTML = 'flex: ' + grow + ' ' + shrink + ' ' + basis + 'px;');
}));
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>flex</code> ми можемо визначити довжину елемента, по відношенню до іншої частини гнучких елементів всередині того ж контейнера.</p>
<p>Ви бачите три ідентичних блоки, але для них задані різні значення пропорції відносно ширини контейнера: <em>1</em>, <em>2</em> й <em>3 </em> відповідно.</p>
</div>
<div class="wrapper">
<div class="block one">
<p>1</p>
</div>
<div class="block two">
<p>2</p>
</div>
<div class="block three">
<p>3</p>
</div>
</div>
CSS
* {
box-sizing: border-box;
}
body {
font-family: monospace;
font-size: 15px;
line-height: 1.45;
}
.info {
padding: 6px;
}
code {
font-weight: 700;
color: #444;
border-bottom: 2px solid #666;
}
.wrapper {
display: flex;
justify-content: space-around;
background-color: #dedede;
height: 150px;
}
.block {
border-left: 4px solid #dedede;
line-height: 89px;
font-weight: 700;
background-color: gold;
padding: 0;
margin: 0;
text-align: center;
font-size: 2em;
}
.block:first-child {
border-left: 0;
}
.block.one {
flex: 1;
}
.block.two {
flex: 2;
}
.block.three {
flex: 3;
}
Верхній ряд — flex: 1 (базис 0, тому колонки однакові попри різний текст). Нижній — flex-grow: 1 (базис auto, тому довший вміст лишається ширшим). Це і є різниця, через яку «колонки не тієї ширини».
HTML
<p>flex: 1</p>
<div class="row a">
<div>слово</div>
<div>значно довший текст усередині колонки</div>
<div>середній</div>
</div>
<p>flex-grow: 1</p>
<div class="row b">
<div>слово</div>
<div>значно довший текст усередині колонки</div>
<div>середній</div>
</div>
CSS
.row {
display: flex;
margin-bottom: 20px;
}
.row div {
padding: 8px;
border: 1px solid #666;
background: #f2f2f2;
}
.a div {
flex: 1;
}
.b div {
flex-grow: 1;
}
Різні значення властивості
HTML
<p>Вибери потрібне значення для <code>flex</code> (для лівої навігації):</p>
<input type="number" min="0" value="1" id="field"></input>
<p id="text"></p>
<hr>
<div class="layout">
<header>
<h4>Simple website</h4>
</header>
<main>
<nav id="nav">
<pre><code>flex: <strong id="newval">1</strong>;</code></pre>
</nav>
<section id="wrapper">
<pre><code>flex: 3;</code>
</section>
</main>
<footer>
© 2017
</footer>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
text-align: center;
font-family: monospace;
font-size: 17px;
line-height: 1.5;
color: #222;
}
#field {
padding: 8px 16px;
font-size: 19px;
}
header {
line-height: 75px;
text-align: center;
text-transform: uppercase;
background-color: #808080;
color: #f9f9f9;
}
main {
display: flex;
}
nav {
flex: 1;
background-color: yellow;
}
nav a {
display: block;
margin-bottom: 16px;
text-align: left;
text-decoration: none;
color: #151515;
}
#wrapper {
flex: 3;
background-color: #eee;
display: flex;
justify-content: center;
align-content: center;
}
.child {
width: 25%;
line-height: 30px;
color: #f1f1f1;
border-radius: 4px;
background-color: #666;
border: 2px solid #000;
}
.child-1 {
height: 45px;
}
.child-2 {
height: 125px;
}
.child-3 {
height: 75px;
}
#block {
background-color: red;
}
footer {
line-height: 50px;
background-color: #000;
color: #f1f1f1;
margin-top: 16px;
}
JS
var nav = document.getElementById('nav');
var newval = document.getElementById('newval');
document.getElementById('field').onchange = function () {
nav.style.flex = this.value;
newval.innerHTML = this.value;
};
//# sourceURL=pen.js
Проста демонстрації дії влативості
HTML
<div class="wrapper">
<div class="gold">3</div>
<div class="red">1</div>
<div class="blue">4</div>
</div>
<div class="wrapper wrapper-small">
<div class="gold">3</div>
<div class="red">1</div>
<div class="blue">4</div>
</div>
CSS
* {
box-sizing: border-box;
}
.wrapper {
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
align-items: baseline;
margin-bottom: 36px;
}
.wrapper-small {
width: 50%;
}
.wrapper > div {
padding: 16px;
text-align: center;
}
.gold {
background-color: gold;
-webkit-flex: 3;
-moz-flex: 3;
-ms-flex: 3;
-o-flex: 3;
flex: 3;
}
.red {
background-color: red;
-webkit-flex: 1;
-moz-flex: 1;
-ms-flex: 1;
-o-flex: 1;
flex: 1;
}
.blue {
background-color: steelblue;
-webkit-flex: 4;
-moz-flex: 4;
-ms-flex: 4;
-o-flex: 4;
flex: 4;
}
Коментарі
Коментарів ще немає — будьте першим!