CSS flex-flow — напрямок і перенос флекс-елементів одним рядком
Це скорочена властивість для властивостей:
flex-direction(відповідає за напрямок шикування гнучких елементів)flex-wrap(забороняє чи дозволяє знесення гнучких елементів)
Задає для контейнера основну та поперечну осі.
Ви можете вказати одне чи два значення - порядок не важливий.
автор: Svitlana
Загальний опис
автор: NagarD
- Нотатка
-
Властивість
автор: Svitlanaflexпрацює тільки зі гнучкими елементами, тобто з тими елементами, у котрих властивістьdisplayвстановлена якflex(display: flex;абоdisplay: inline-flex).
Синтаксис
flex-flow: flex-direction flex-wrap|initial|inherit;
Властивість flex-flow може отримувати 4 значень:
-
flex-direction -
Напрямок відображення гнучких елементів.
автор: Svitlana -
flex-wrap -
Спосіб знесення гнучких елементів.
автор: Svitlana -
initial -
Встановлює цю властивість в значення без задання
автор: Svitlana -
inherit -
Успадкує значення властивості від свого батьківського елемента
автор: Svitlana
| Значення без задання: | row nowrap |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.flexFlow="column nowrap" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 28 | 9 | 12.1 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 28 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
flex-flow — скорочення для напрямку та переносу разом: елементи шикуються справа наліво і, коли не вміщаються, переносяться на новий рядок.
HTML
<div class="row">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
</div>
CSS
.row {
display: flex;
flex-flow: row-reverse wrap;
}
.row div {
width: 110px;
padding: 8px;
border: 1px solid #0172ad;
text-align: center;
}
HTML
<p>Цей приклад показує як працює властивість <code>flex-flow</code>. Змінюйте значення для під-властивостей нижче, щоб змінити відображення гумового контейнера нижче.</p>
<p>Ви можете вибрати значення для <code>flex-direction</code> i <code>flex-wrap</code> відповідно.</p>
<hr>
<strong>flex-flow: </strong>
<select class="input" id="sel_dir">
<option value="row" name="value2" selected>row</option>
<option value="row-reverse" name="value2">row-reverse</option>
<option value="column" name="value2">column</option>
<option value="column-reverse" name="value2">column-reverse</option>
</select>
<select class="input" id="sel_wrp">
<option value="wrap" name="value2" selected>wrap</option>
<option value="nowrap" name="value2">nowrap</option>
<option value="wrap-reverse" name="value2">wrap-reverse</option>
</select>
<strong>;</strong><br><br>
<hr>
<div class="box">
<div class="child">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</div>
<div class="child">6</div>
<div class="child">7</div>
<div class="child">8</div>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
font-family: system-ui, sans-serif;
}
.child {
background-color: gold;
text-align: center;
font-weight: 700;
width: 50px;
height: 50px;
margin: 2px;
line-height: 50px;
}
message {
display: none;
}
.wm {
min-height: 100px;
}
.box {
width: 100%;
background-color: #dcdcdc;
padding: 16px;
display: flex;
flex-flow: row wrap;
}
hr {
margin-bottom: 16px;
}
JS
document.querySelectorAll('.input').forEach((el) => el.addEventListener('change', function () {
var sel_dir = document.querySelector('#sel_dir').selectedOptions[0].textContent;
var sel_wrp = document.querySelector('#sel_wrp').selectedOptions[0].textContent;
document.querySelectorAll('.box').forEach((n) => n.style.setProperty('flex-flow', sel_dir + ' ' + sel_wrp));
}));
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>flex-flow</code> ми можемо визначити напрямок головної осі гумового контейнера та можливысть їх знесення нащадків одночасно.</p>
<p>Ви бачите два ідентичних блоки, але для них задані властивості двома способами: за допомогою двох властивостей <code>flex-direction</code>, <code>flex-wrap</code> й за допомогою однієї універсальної - <code>flex-flow</code> відповідно.</p>
</div>
<div class="wrapper">
<ul class="block one">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul class="block two">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</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;
}
.block {
background-color: #dedede;
padding: 0;
margin: 0;
width: 200px;
height: 125px;
list-style: none;
display: flex;
}
.block li {
text-align: center;
background-color: gold;
margin: 2px;
width: 30px;
height: 30px;
line-height: 34px;
font-weight: 700;
}
.block.one {
flex-direction: row-reverse;
flex-wrap: wrap;
}
.block.two {
flex-flow: row-reverse wrap;
}
Простий приклад
HTML
<div class="wrapper">
<div class="gold">1</div>
<div class="red">2</div>
<div class="blue">3</div>
<code>
flex-flow: column wrap-reverse;
</code>
</div>
CSS
* {
box-sizing: border-box;
}
.wrapper {
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
flex-flow: column wrap-reverse;
}
.wrapper > div {
padding: 26px 12px;
width: 30%;
font-weight: 700;
font-size: 3em;
text-align: center;
}
.gold {
background-color: gold;
}
.red {
background-color: red;
}
.blue {
background-color: steelblue;
}
code {
position: absolute;
top: 25%;
left: 5%;
color: #252525;
font-size: 18px;
}
Обидва контейнери мають flex-flow: column wrap. Ліворуч висота не задана — переносити нема куди, і всі шість елементів стоять одним стовпчиком. Праворуч height: 150px — і колонки з'являються.
HTML
<figure>
<div class="col free">
<span>1</span><span>2</span><span>3</span><span>4</span><span>5</span><span>6</span>
</div>
<figcaption>column wrap без висоти</figcaption>
</figure>
<figure>
<div class="col fixed">
<span>1</span><span>2</span><span>3</span><span>4</span><span>5</span><span>6</span>
</div>
<figcaption>column wrap + height: 150px</figcaption>
</figure>
CSS
figure {
display: inline-block;
margin: 0 20px 0 0;
font: 12px monospace;
text-align: center;
vertical-align: top;
}
.col {
display: flex;
flex-flow: column wrap;
gap: 4px;
width: 190px;
padding: 4px;
border: 2px solid #0172ad;
}
.col span {
padding: 4px 14px;
background: #0172ad;
color: #fff;
}
.fixed {
height: 150px;
}
Демонстрація дії різних значень властивості
HTML
<p>Вибери потрібні значення для <code>flex-flow</code>:</p>
<select id="form-1">
<option value="row" name="value1" selected>row</option>
<option value="row-reverse" name="value1">row-reverse</option>
<option value="column" name="value1">column</option>
<option value="column-reverse" name="value1">column-reverse</option>
</select>
<select id="form-2">
<option value="nowrap" name="value2" selected>nowrap</option>
<option value="wrap" name="value2">wrap</option>
<option value="wrap-reverse" name="value2">wrap-reverse</option>
</select>
<p id="text-1"></p>
<p id="text-2"></p>
<hr>
<div class="layout">
<header>
<h4>Simple website</h4>
</header>
<main>
<nav>
<a href="#">Item 1</a>
<a href="#">Item 2</a>
<a href="#">Item 3</a>
<a href="#">Item 4</a>
</nav>
<section id="wrapper">
<div class="child child-1">1</div>
<div class="child child-2">2</div>
<div class="child child-3">3</div>
</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;
}
p {
text-align: left;
}
#form-1,
#form-2 {
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 {
width: 30%;
background-color: yellow;
padding: 16px;
}
nav a {
display: block;
margin-bottom: 16px;
text-align: left;
text-decoration: none;
color: #151515;
}
#wrapper {
background-color: #eee;
display: flex;
padding: 16px;
flex: 1;
}
.child {
width: 25%;
color: #f1f1f1;
font-weight: 700;
border-radius: 4px;
background-color: #444;
border: 4px solid #666;
margin: 5px;
}
footer {
line-height: 50px;
background-color: #000;
color: #f1f1f1;
margin-top: 16px;
}
JS
var wrapper = document.getElementById('wrapper');
var form1 = document.getElementById('form-1');
var form2 = document.getElementById('form-2');
var text1 = document.getElementById('text-1');
var text2 = document.getElementById('text-2');
var textArray = { 'row': 'Контейнери будуть розташовані зліва направо. Якщо значення dir задано як rtl, то напрямок буде справа наліво. За замовчуванням.',
'row-reverse': 'Теж саме, що і row, але в зворотному порядку.',
'column': 'Флекс елементи відображаються у вигляді стовпчика. Стовпчик формується зверху вниз.',
'column-reverse': 'Теж саме, що і column, але знизу вверх.',
'nowrap': 'Знесення заборонене. Гнучкі елементи шикуються в одну лінію. За замовчуванням.',
'wrap': 'Гнучкі елементи шикуються в кілька рядків, їх напрямок задається властивістю flex-direction.',
'wrap-reverse': 'Гнучкі елементи шикуються в кілька рядків, в напрямку, протилежному flex-direction.' };
form1.onchange = form2.onchange = function change() {
var newVal = getNewValue();
wrapper.style.flexFlow = newVal[0] + ' ' + newVal[1];
text1.innerHTML = 'flex-direction: ' + textArray[newVal[0]];
text2.innerHTML = 'flex-wrap: ' + textArray[newVal[1]];
};
function getNewValue() {
var result = [];
for (var i = 0; i < form1.options.length; i++) {if (window.CP.shouldStopExecution(0)) break;
if (form1.options[i].selected == true) {
result[0] = form1.options[i].value;
}
}window.CP.exitedLoop(0);
for (var i = 0; i < form2.options.length; i++) {if (window.CP.shouldStopExecution(1)) break;
if (form2.options[i].selected == true) {
result[1] = form2.options[i].value;
}
}window.CP.exitedLoop(1);
return result;
}
//# sourceURL=pen.js
Коментарі
Коментарів ще немає — будьте першим!