CSS justify-content — вирівнювання вздовж головної осі
Властивість justify-content вирівнює елементи гнучкого контейнера, коли елементи не використовують ввесь доступний простір на головній осі контейнера (по горизонталі). Це робиться після того, як застосовуються розміри і автоматичні відступи, за винятком ситуації, коли принаймні у одного елемента flex-grow більше нуля. При цьому не залишається ніякого вільного простору для маніпулювання.

Властивість вирівнює елементи по головні осі поточної лінії контейнера. Визначає розподілення вільного простору між нащадками.
Вирівнювання впливає на елементами якщо задані довжина та відступи (тому допустимі значення auto для відступів). Тому, якщо хоча б один із нащадків має заданий flex-grow зі значенням 0, використання justify-content не матиме ефекту.
Загальний опис
автор: NagarD
- Порада
-
Використовуйте властивість
автор: Svitlanaalign-itemsдля вирівнювання елементів на поперечної осі (по вертикалі). - Нотатка
-
Хоча початково властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток (CSS Grid).
автор: Svitlana
Синтаксис
justify-content: flex-start|flex-end|center|space-between|space-around|initial|inherit;
Властивість justify-content може отримувати 7 значень:
-
flex-start -
Елементи розташовані на початку контейнера. Значення без задання.
автор: Svitlana -
flex-end -
Елементи розташовані в кінці контейнера.
автор: Svitlana -
center -
Елементи розташовані в центрі контейнера.
автор: Svitlana -
space-between -
Флекси рівномірно розподіляються по всьому рядку. Перший і останній флекс притискаються до відповідних країв контейнера.
автор: Svitlana -
space-around -
Флекси рівномірно розподіляються по всьому рядку. Порожній простір перед першим і після останнього елементів дорівнює половині простору між двома сусідніми елементами.
автор: Svitlana -
initial -
Встановлює цю властивість в значення без задання.
автор: Svitlana -
inherit -
Успадкує значення властивості від свого батьківського елемента.
автор: Svitlana
| Значення без задання: | flex-start |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.justifyContent="space-between" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 20 | 9 | 12.1 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 20 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
Інструмент
Показує, як властивості флекс-контейнера розставляють елементи.
Пісочниця Flexbox — окремою сторінкою, з поясненням пасток.
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>justify-content</code> ми можемо вирівняти елементи гнучкого контейнера відносно головної осі.</p>
<p>Ви бачите три ідентичних блоки, але для них задані різні значення для <code>justify-content</code>: <em>flex-end</em>, <em>center</em> й <em>space-around</em> відповідно.</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>
<ul class="block three">
<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;
list-style: none;
display: flex;
padding: 16px 0;
}
.block li {
text-align: center;
background-color: gold;
border: 1px solid #dedede;
width: 34px;
height: 34px;
line-height: 38px;
font-weight: 700;
}
.block.one {
justify-content: flex-end;
}
.block.two {
justify-content: center;
}
.block.three {
justify-content: space-around;
}
HTML
<p>Цей приклад показує як працює властивість <code>justify-content</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити вирівнювання в гнучкому контейнері нижче.</p>
<div class="inputs">
<input id="flex-start" checked name="justify-content" type="radio"/>
<label for="flex-start">flex-start</label>
<message for="flex-start">Елементи розташовані на початку контейнера. Значення без задання.</message>
<input id="flex-end" name="justify-content" type="radio"/>
<label for="flex-end">flex-end</label>
<message for="flex-end">Елементи розташовані в кінці контейнера.</message>
<input id="center" name="justify-content" type="radio"/>
<label for="center">center</label>
<message for="center">Елементи розташовані в центрі контейнера.</message>
<input id="space-between" name="justify-content" type="radio"/>
<label for="space-between">space-between</label>
<message for="space-between">Флекси рівномірно розподіляються по всьому рядку. Перший і останній флекс притискаються до відповідних країв контейнера.</message>
<input id="space-around" name="justify-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">1</div>
<div class="child">2</div>
<div class="child">3</div>
<div class="child">4</div>
<div class="child">5</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: 100%;
display: flex;
justify-content: flex-start;
background-color: gold;
padding: 4px;
}
.child {
background-color: #444;
color: #999;
text-align: center;
width: 50px;
height: 50px;
margin: 4px;
line-height: 50px;
font-weight: 700;
}
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('justify-content', this.id));
}));
Ті самі три елементи з чотирма значеннями justify-content — і четвертий ряд, де flex-direction: column перевертає вісь: center починає центрувати по вертикалі.
HTML
<p>space-between</p>
<div class="row between"><span>1</span><span>2</span><span>3</span></div>
<p>space-evenly</p>
<div class="row evenly"><span>1</span><span>2</span><span>3</span></div>
<p>center</p>
<div class="row center"><span>1</span><span>2</span><span>3</span></div>
<p>center + flex-direction: column</p>
<div class="row center column"><span>1</span><span>2</span><span>3</span></div>
CSS
.row {
display: flex;
height: 90px;
margin-bottom: 1rem;
border: 1px dashed #9bb;
background: #f6fbfb;
}
.row span {
padding: 0.5rem 1rem;
background: #2b7a78;
color: #fff;
}
.between { justify-content: space-between; }
.evenly { justify-content: space-evenly; }
.center { justify-content: center; }
/* головна вісь стала вертикальною — center працює по вертикалі */
.column { flex-direction: column; }
Демонстрація дії різних значень властивості
HTML
<p>Вибери потрібні значення для <code>flex-content</code>:</p>
<select id="form">
<option value="flex-start" selected>flex-start</option>
<option value="flex-end">flex-end</option>
<option value="center">center</option>
<option value="space-between">space-between</option>
<option value="space-around">space-around</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;
height: 500px;
padding: 16px;
width: 70%;
}
.child {
height: 45%;
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 form = document.getElementById('form');
var text = document.getElementById('text');
var textArray = { 'flex-start': 'Елементи розташовані на початку контейнера. Значення за замовчуванням.',
'flex-end': 'Елементи розташовані в кінці контейнера.',
'center': 'Елементи розташовані в центрі контейнера.',
'space-between': 'Флекси рівномірно розподіляються по всьому рядку. Перший і останній флекс притискаються до відповідних країв контейнера.',
'space-around': 'Флекси рівномірно розподіляються по всьому рядку. Порожній простір перед першим і після останнього елементів дорівнює половині простору між двома сусідніми елементами.' };
form.onchange = function change() {
var newVal = getNewValue();
wrapper.style.justifyContent = newVal;
text.innerHTML = textArray[newVal];
};
function getNewValue() {
var result = '';
for (var i = 0; i < form.options.length; i++) {if (window.CP.shouldStopExecution(0)) break;
if (form.options[i].selected == true) {
result = form.options[i].value;
}
}window.CP.exitedLoop(0);
return result;
}
//# sourceURL=pen.js
Простий приклад роботи властивості
HTML
<div class="wrapper">
<div class="gold">1</div>
<div class="red">2</div>
<div class="blue">3</div>
</div>
CSS
* {
box-sizing: border-box;
}
.wrapper {
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
padding: 16px;
justify-content: space-around;
}
.wrapper > div {
padding: 46px 0 76px 0;
font-weight: 700;
font-size: 2em;
text-align: center;
height: 75%;
width: 25%;
}
.gold {
background-color: gold;
}
.red {
background-color: red;
}
.blue {
background-color: steelblue;
}
Коментарі
Коментарів ще немає — будьте першим!