CSS flex-flow — напрямок і перенос флекс-елементів одним рядком


Це скорочена властивість для властивостей:

  • flex-direction (відповідає за напрямок шикування гнучких елементів)
  • flex-wrap (забороняє чи дозволяє знесення гнучких елементів)

Задає для контейнера основну та поперечну осі.

Ви можете вказати одне чи два значення - порядок не важливий.

автор: Svitlana

Загальний опис

автор: NagarD

Нотатка

Властивість flex працює тільки зі гнучкими елементами, тобто з тими елементами, у котрих властивість display встановлена як flex (display: flex; або display: inline-flex).

автор: Svitlana

Синтаксис

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"

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
29 28 9 12.1 12 11
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
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;
}
автор: Svitlana

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));

}));
автор: Svitlana

Приклад роботи властивості

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;
}
автор: Svitlana

Простий приклад

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;
}
автор: Svitlana

Обидва контейнери мають 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;
}
автор: NagarD

Демонстрація дії різних значень властивості

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>
    &copy; 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
автор: Svitlana

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле веде сходинками (розділ → тип → сторінка), а хибний ключ підкреслить хвилею.
[[!sandbox/S0oh1hBm]] Живий приклад окремим рядком — саме вікно результату. Той самий ключ зі знаком !: наберіть [[! і дійдіть сходинками до потрібної сторінки, список покаже її приклади.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Правка
Зворотний зв'язок
Вхід