CSS justify-content — вирівнювання вздовж головної осі


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

Властивість justify-content

Властивість вирівнює елементи по головні осі поточної лінії контейнера. Визначає розподілення вільного простору між нащадками.

Вирівнювання впливає на елементами якщо задані довжина та відступи (тому допустимі значення auto для відступів). Тому, якщо хоча б один із нащадків має заданий flex-grow зі значенням 0, використання justify-content не матиме ефекту.

автор: Svitlana

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

автор: NagarD

Порада

Використовуйте властивість align-items для вирівнювання елементів на поперечної осі (по вертикалі).

автор: Svitlana
Нотатка

Хоча початково властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток (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"

Переглядачі

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

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

}));
автор: Svitlana

Ті самі три елементи з чотирма значеннями 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; }
автор: NagarD

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

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>
    &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;
}


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

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

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;
}
автор: 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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