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

align-items відрізняється від align-content, тим що перша властивість задає вирівнювання елементів у поточному рядку гнучкого контейнера, а друга - вирівнює власне самі рядки.
Візуалізація роботи властивості:

Властивість подібна до justify-content, але працює лише у перпендикулярному напрямку.
Хоча початково властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток (CSS Grid).
автор: Svitlana
Загальний опис
автор: NagarD
- Порада
-
Використовуйте властивість align-self, щоб перевизначити властивістьalign-items для окремого елемента.
автор: Svitlana - Нотатка
-
Значення stretch працює, тільки тоді, коли не вказано висоту дочірнього елемента. Ця властивість дозволяє працювати зі гнучкими, блоковими контейнерами, а також сітками.
автор: Svitlana
Синтаксис
align-items: stretch|center|flex-start|flex-end|baseline|initial|inherit;
Властивість align-items може отримувати 7 значень:
-
stretch -
Елементи розтягуються та займають весь доступний простір контейнера. Без задання.
автор: Svitlana -
center -
Елементи розташовані по центру контейнера.
автор: Svitlana -
flex-start -
Елементи розташовані на початку контейнера.
автор: Svitlana -
flex-end -
Елементи розташовані в кінці контейнера.
автор: Svitlana -
baseline -
Елементи розташовані на базовій лінії контейнера.
автор: Svitlana -
initial -
Встановлює властивість у значення без задання
автор: Svitlana -
inherit -
Вказує на спадковість властивості від свого батьківського елемента (якщо відповідна властивість встановлена)
автор: Svitlana
| Значення без задання: | stretch |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.alignItems="center" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 20 | 9 | 16 | 12 | 11 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 20 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
Інструмент
Показує, як властивості флекс-контейнера розставляють елементи.
Пісочниця Flexbox — окремою сторінкою, з поясненням пасток.
Контейнер вищий за елементи, тож видно, як align-items: center вирівнює їх по центру поперечної осі — незалежно від висоти кожного.
HTML
<div class="row">
<div>один</div>
<div>два<br>рядки</div>
<div>три</div>
</div>
CSS
.row {
display: flex;
align-items: center;
height: 120px;
gap: 8px;
background: #eee;
}
.row div {
background: #0172ad;
color: #fff;
padding: 8px;
}
HTML
<p>Цей приклад показує як працює властивість <code>align-items</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити метод вирівнювання нащадків у контейнері нижче.</p>
<div class="inputs">
<input id="stretch" checked name="align-items" type="radio"/>
<label for="stretch">stretch</label>
<message for="stretch">Елементи розтягуються та займають весь доступний простір контейнера. Без задання.</message>
<input id="center" name="align-items" type="radio"/>
<label for="center">center</label>
<message for="center">Елементи розташовані по центру контейнера.</message>
<input id="flex-start" name="align-items" type="radio"/>
<label for="flex-start">flex-start</label>
<message for="flex-start">Елементи розташовані на початку контейнера.</message>
<input id="flex-end" name="align-items" type="radio"/>
<label for="flex-end">flex-end</label>
<message for="flex-end">Елементи розташовані в кінці контейнера.</message>
<input id="baseline" name="align-items" type="radio"/>
<label for="baseline">baseline</label>
<message for="baseline">Елементи розташовані на базовій лінії контейнера.</message>
</div>
<div class="wm">
<p id="message">Елементи розтягуються та займають весь доступний простір контейнера. Без задання.</p>
</div>
<hr>
<div id="box">
<div class="child">stretch</div>
<div class="child">stretch</div>
<div class="child">stretch</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-items: stretch;
background-color: gold;
padding: 4px;
}
.child {
background-color: #222;
color: #999;
padding: 16px;
text-align: center;
width: 32%;
margin-left: 1%;
line-height: 50px;
}
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-items', 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;
font-family: monospace;
color: #fff;
border: 2px solid #ddd;
display: flex;
align-items: center;
}
.wrapper > div {
width: 17%;
padding: 16px;
text-align: center;
}
.gold {
background-color: gold;
height: 25%;
}
.red {
background-color: red;
height: 50%;
}
.blue {
background-color: steelblue;
height: 12%;
}
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>align-items</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>
<li>4</li>
</ul>
<ul class="block center">
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
<ul class="block flex-end">
<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 {
width: 150px;
height: 150px;
background-color: gold;
padding: 0;
margin: 0;
list-style: none;
display: flex;
}
.block li {
background: tomato;
padding: 5px;
width: 50px;
margin: 5px;
line-height: 50px;
color: white;
font-weight: bold;
font-size: 1.5em;
text-align: center;
}
.block.flex-start {
align-items: flex-start;
}
.block.center {
align-items: center;
}
.block.flex-end {
align-items: flex-end;
}
Три однакові контейнери й ті самі три підписи різного кегля: stretch розтягує їх на всю висоту, center ставить по середині, baseline вирівнює базові лінії тексту.
HTML
<figure>
<div class="box v-stretch"><span class="a">Аа</span><span class="b">Бб</span><span class="c">Вв</span></div>
<figcaption>stretch — без задання</figcaption>
</figure>
<figure>
<div class="box v-center"><span class="a">Аа</span><span class="b">Бб</span><span class="c">Вв</span></div>
<figcaption>center</figcaption>
</figure>
<figure>
<div class="box v-base"><span class="a">Аа</span><span class="b">Бб</span><span class="c">Вв</span></div>
<figcaption>baseline</figcaption>
</figure>
CSS
figure {
display: inline-block;
margin: 0 16px 0 0;
font: 12px monospace;
text-align: center;
vertical-align: top;
}
.box {
display: flex;
gap: 6px;
width: 170px;
height: 120px;
padding: 6px;
border: 2px solid #0172ad;
}
.box span {
padding: 4px 8px;
background: #0172ad;
color: #fff;
}
.box .a { font-size: 12px; }
.box .b { font-size: 20px; }
.box .c { font-size: 30px; }
.v-stretch { align-items: stretch; }
.v-center { align-items: center; }
.v-base { align-items: baseline; }
Приклади дії різних значень
HTML
<p>Вибери потрібне значення для <code>align-items</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="baseline" name="value">baseline</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: 25%;
line-height: 30px;
color: #f1f1f1;
border-radius: 4px;
background-color: #666;
border: 2px solid #000;
}
.child-1 {
height: 45px;
}
.child-2 {
height: 125px;
}
.child-3 {
height: 75px;
}
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': 'Елементи розташовані по центру контейнера.',
'baseline': 'Елементи розташовані на базовій лінії контейнера.',
'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.alignItems = form.options[i].value;
text.innerHTML = textArray[form.options[i].value];
}
}window.CP.exitedLoop(0);
};
//# sourceURL=pen.js
Коментарі
Коментарів ще немає — будьте першим!