CSS align-content — розподіл РЯДКІВ поперек осі
CSS властивість align-content задає вирівнювання для кожного рядка гумового елемента по перпендикулярній (вертикальній) вісі.

Ця властивість схожа align-items, але замість вирівнювання гнучких елементів, він вирівнює рядки в гнучких елементах. Вона працює як justify-content, але вирівнює не окремі елементи, а цілий рядок у багаторядковому контейнері, якщо є додатковий простір у вертикальному напрямку.
Хоча початково я властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток(CSS Grid).
CSS властивість align-content може приймати 6 різних значень, кожне з яких змінює поведінку цієї властивості. Візуально поведінка змінюється так:

Загальний опис
автор: NagarD
- Порада
-
Зверни увагу, властивість
автор: NagarDalign-contentне буде працювати, якщо гумовий контейнер має тільки один рядок з елементами! - Порада
-
Використовуй властивість
автор: NagarDjustify-contentдля вирівнювання елементів по головній (горизонтальній) вісі. - Нотатка
-
Властивість
автор: NagarDalign-contentзмінює поведінку властивостіflex-wrap. - Нотатка
-
Значення
автор: NagarDstretchпрацює, тільки тоді, коли не вказано висоту дочірнього елемента. Ця властивість дозволяє працювати зі гнучкими, блоковими контейнерами, а також сітками.
Синтаксис
align-content: stretch|center|flex-start|flex-end|space-between|space-around|initial|inherit;
Властивість align-content може отримувати 8 значень:
-
stretch -
Рядки розтягуються, щоб заповнити вільний простір. Без задання.
автор: NagarD -
center -
Рядки вирівнюються по центру гумового контейнера.
автор: NagarD -
flex-start -
Рядки розташовуються на початку поперечної вісі.
автор: NagarD -
flex-end -
Рядки розташовуються з кінця поперечної осі.
автор: NagarD -
space-between -
Рядки рівномірно розподіляються в гумовому контейнері. Перший рядок знаходиться на початку контейнера, а останній перебуває в кінці.
автор: NagarD -
space-around -
Рядки рівномірно розподілені з рівними відстанями між ними.
Порожній простір перед першим рядком і після останнього рядка дорівнює половині простору між двома сусідніми рядками.
автор: NagarD -
initial -
Встановлює властивість у значення без задання
автор: NagarD -
inherit -
Вказує на спадковість властивості від свого батьківського елемента.
автор: NagarD
| Значення без задання: | stretch |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.alignContent="center" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 28 | 9 | 16 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 28 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
Інструмент
Показує, як властивості флекс-контейнера розставляють елементи.
Пісочниця Flexbox — окремою сторінкою, з поясненням пасток.
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>align-content</code> ми можемо визначити вирівнювання для гумового елемента по перпендикулярній вісі відносно контейнера.</p>
<p>Ви бачите два ідентичні контейнери, але для них задані різні значення для вирівнювання: <em>flex-start</em>, <em>center</em> й <em>flex-end</em> відповідно.</p>
</div>
<div class="wrapper">
<ul class="block flex-start">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul class="block center">
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<ul class="block flex-end">
<li>1</li>
<li>2</li>
<li>3</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 {
width: 150px;
height: 150px;
background-color: gold;
padding: 0;
margin: 0;
list-style: none;
display: flex;
flex-flow: row wrap;
}
.block li {
background: tomato;
width: 100%;
padding: 2px;
margin-bottom: 4px;
line-height: 1em;
color: white;
font-size: .8em;
font-weight: bold;
text-align: center;
}
.block.flex-start {
align-content: flex-start;
}
.block.center {
align-content: center;
}
.block.flex-end {
align-content: flex-end;
}
HTML
<p>Цей приклад показує як працює властивість <code>align-content</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити метод вирівнювання нащадків у контейнері нижче.</p>
<div class="inputs">
<input id="stretch" checked name="align-content" type="radio"/>
<label for="stretch">stretch</label>
<message for="stretch">Рядки розтягуються, щоб заповнити вільний простір. Без задання.</message>
<input id="center" name="align-content" type="radio"/>
<label for="center">center</label>
<message for="center">Рядки вирівнюються по центру гумового контейнера.</message>
<input id="flex-start" name="align-content" type="radio"/>
<label for="flex-start">flex-start</label>
<message for="flex-start">Рядки розташовуються на початку поперечної вісі.</message>
<input id="flex-end" name="align-content" type="radio"/>
<label for="flex-end">flex-end</label>
<message for="flex-end">Рядки розташовуються з кінця поперечної осі.</message>
<input id="space-between" name="align-content" type="radio"/>
<label for="space-between">space-between</label>
<message for="space-between">Рядки рівномірно розподіляються в гумовому контейнері. Перший рядок знаходиться на початку контейнера, а останній перебуває в кінці.</message>
<input id="space-around" name="align-content" type="radio"/>
<label for="space-around">space-around</label>
<message for="space-around">Рядки рівномірно розподілені з рівними відстанями між ними. Порожній простір перед першим рядком і після останнього рядка дорівнює половині простору між двома сусідніми рядками.</message>
</div>
<div class="wm">
<p id="message">Рядки розтягуються, щоб заповнити вільний простір. Без задання.</p>
</div>
<hr>
<div id="box">
<div class="child">block</div>
<div class="child">block</div>
<div class="child">block</div>
</div>
CSS
* {
box-sizing: border-box;
padding: 0;
}
body {
font-family: system-ui, sans-serif;
}
#box {
margin-top: 25px;
line-height: 1.45;
width: 400px;
height: 250px;
display: flex;
align-content: stretch;
flex-flow: row wrap;
background-color: gold;
padding: 4px;
}
.child {
background-color: #222;
color: #999;
padding: 16px;
text-align: center;
width: 100%;
margin-bottom: 4px;
}
message {
display: none;
}
.wm {
min-height: 100px;
}
JS
const message = document.querySelector('#message');
document.querySelectorAll('.inputs input').forEach((el) => el.addEventListener('change', function () {
var messageText = document.querySelector("message[for='" + this.id + "']");
message.textContent = messageText?.textContent ?? '';
document.querySelectorAll('#box').forEach((n) => n.style.setProperty('align-content', this.id));
document.querySelectorAll('#box .child').forEach((n) => n.innerHTML = this.id);
}));
Демонстрація властивості
HTML
<div class="wrapper">
<div class="gold">1</div>
<div class="red">2</div>
<div class="blue">3</div>
</div>
CSS
.wrapper {
height: 225px;
padding: 16px;
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
flex-wrap: wrap;
align-content: space-between;
}
.wrapper > div {
width: 75%;
padding: 16px;
}
.gold {
background-color: gold;
}
.red {
background-color: red;
}
.blue {
background-color: steelblue;
}
Ті самі шість елементів у двох однакових контейнерах: ліворуч align-items: center центрує елементи в їхньому рядку, праворуч align-content: center зсуває самі рядки до середини.
HTML
<figure>
<div class="box items">
<span>1</span><span class="tall">2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
<figcaption>align-items: center</figcaption>
</figure>
<figure>
<div class="box content">
<span>1</span><span class="tall">2</span><span>3</span>
<span>4</span><span>5</span><span>6</span>
</div>
<figcaption>align-content: center</figcaption>
</figure>
CSS
figure {
display: inline-block;
margin: 0 16px 0 0;
font: 12px monospace;
text-align: center;
}
.box {
display: flex;
flex-wrap: wrap;
gap: 6px;
width: 170px;
height: 220px;
padding: 6px;
border: 2px solid #0172ad;
}
.box span {
padding: 6px 12px;
background: #0172ad;
color: #fff;
}
.tall {
padding-top: 22px;
padding-bottom: 22px;
}
.items {
align-items: center;
}
.content {
align-content: center;
}
Приклад дії різних значень властивості align-content
HTML
<p>Вибери потрібне значення для <code>align-content</code>:</p>
<select id="form">
<option value="flex-start" name="value">flex-start</option>
<option value="flex-end" name="value">flex-end</option>
<option value="center" name="value">center</option>
<option value="space-between" name="value">space-between</option>
<option value="space-around" name="value">space-around</option>
<option value="stretch" name="value" selected>stretch</option>
</select>
<p id="text"></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;
}
#form {
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;
flex-wrap: wrap;
padding: 16px;
flex: 1;
}
.child {
width: 75%;
line-height: 30px;
height: 30px;
color: #f1f1f1;
border-radius: 4px;
background-color: #666;
border: 2px solid #000;
}
footer {
line-height: 50px;
background-color: #000;
color: #f1f1f1;
margin-top: 16px;
}
JS
var wrapper = document.getElementById('wrapper');
var form = document.getElementById('form');
var text = document.getElementById('text');
var textArray = { 'flex-start': 'Рядки розташовуються на початку поперечної вісі.',
'flex-end': 'Рядки розташовуються з кінця поперечної осі.',
'center': 'Рядки вирівнюються по центру гумового контейнера.',
'space-between': 'Рядки рівномірно розподіляються в гумовому контейнері.',
'space-around': 'Рядки рівномірно розподілені з рівними відстанями між ними.',
'stretch': 'Рядки розтягуються, щоб заповнити вільний простір. За замовчуванням.' };
form.onchange = function () {
for (var i = 0; i < form.options.length; i++) {if (window.CP.shouldStopExecution(0)) break;
if (form.options[i].selected == true) {
wrapper.style.alignContent = form.options[i].value;
text.innerHTML = textArray[form.options[i].value];
}
}window.CP.exitedLoop(0);
};
//# sourceURL=pen.js
Коментарі
Коментарів ще немає — будьте першим!