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

Якщо для нащадку гнучкого елементу заданий відступ зі значенням auto, align-self ігнорується.
Властивість не впливає на елементи таблиці.
Хоча початково властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток (CSS Grid)
автор: Svitlana
Загальний опис
автор: NagarD
- Порада
-
Не забувайте, що властивість
автор: Svitlanaalign-selfперевизначає властивістьalign-items!
Синтаксис
align-self: auto|stretch|center|flex-start|flex-end|baseline|initial|inherit;
Властивість align-self може отримувати 8 значень:
-
auto -
Елемент успадковує батьківське значення властивісті
автор: Svitlanaalign-items. Якщо батька немає значення встановиться -stretch. Без задання. -
stretch -
Елемент розтягується та займає ввесь доступний простір контейнера.
автор: Svitlana -
center -
Елемент розташовується по центру контейнера.
автор: Svitlana -
flex-start -
Елемент розташовується на початку контейнера.
автор: Svitlana -
flex-end -
Елемент розташовується в кінці контейнера.
автор: Svitlana -
baseline -
Елемент вирівнюється по базовій лінії контейнера.
автор: Svitlana -
initial -
Встановлює властивість у значення без задання
автор: Svitlana -
inherit -
Вказує на спадковість властивості від свого батьківського елемента (якщо відповідна властивість встановлена)
автор: Svitlana
| Значення без задання: | auto |
|---|---|
| Наслідує: | Ні |
| Анімується: | Ні |
| JavaScript синтаксис: | object.style.alignSelf="center" |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| 29 | 20 | 9 | 12.1 | 12 | 10 |
| Переглядач | ||||
|---|---|---|---|---|
| 4.4 | 29 | 20 | 9 |
Приклади
+ запропонувати свій приклад у пісочниці
align-self перекриває вирівнювання контейнера для одного елемента: сусіди розтягнуті на всю висоту, а #myBlueDiv — по центру.
HTML
<div class="row">
<div>один</div>
<div id="myBlueDiv">цей — по центру</div>
<div>три</div>
</div>
CSS
.row {
display: flex;
height: 120px;
gap: 8px;
background: #eee;
}
.row div {
background: #999;
color: #fff;
padding: 8px;
}
#myBlueDiv {
align-self: center;
background: #0172ad;
}
HTML
<p>Цей приклад показує як працює властивість <code>align-self</code>. Спробуйте вимкнути/ввімкнути перемикач, щоб змінити метод вирівнювання виділеного (червоного кольору) нащадка у контейнері нижче.</p>
<div class="inputs">
<input id="auto" checked name="align-self" type="radio"/>
<label for="auto">auto</label>
<message for="auto">Елемент успадковує батьківське значення властивісті align-items. Якщо батька немає значення встановиться - stretch. Без задання.</message>
<input id="stretch" name="align-self" type="radio"/>
<label for="stretch">stretch</label>
<message for="stretch">Елемент розтягується та займає ввесь доступний простір контейнера.</message>
<input id="center" name="align-self" type="radio"/>
<label for="center">center</label>
<message for="center">Елемент розташовується по центру контейнера.</message>
<input id="flex-start" name="align-self" type="radio"/>
<label for="flex-start">flex-start</label>
<message for="flex-start">Елемент розташовується на початку контейнера.</message>
<input id="flex-end" name="align-self" type="radio"/>
<label for="flex-end">flex-end</label>
<message for="flex-end">Елемент розташовується в кінці контейнера.</message>
<input id="baseline" name="align-self" type="radio"/>
<label for="baseline">baseline</label>
<message for="baseline">Елемент вирівнюється по базовій лінії контейнера.</message>
</div>
<div class="wm">
<p id="message">Елемент успадковує батьківське значення властивісті align-items. Якщо батька немає значення встановиться - stretch. Без задання.</p>
</div>
<hr>
<div id="box">
<div class="child">stretch</div>
<div class="child hl">auto</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;
}
.child.hl {
background-color: #F74C32;
color: #000;
}
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 .child.hl').forEach((n) => n.style.setProperty('align-self', this.id));
document.querySelectorAll('#box .child.hl').forEach((n) => n.innerHTML = this.id);
}));
Демонстрація дії різних значень
HTML
<p>Вибери потрібне значення для <code>align-self</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">stretch</option>
<option value="stretch" name="value" selected>auto</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" id="block">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;
}
#block {
background-color: red;
}
footer {
line-height: 50px;
background-color: #000;
color: #f1f1f1;
margin-top: 16px;
}
JS
var block = document.getElementById('block');
var form = document.getElementById('form');
var text = document.getElementById('text');
var textArray = { 'flex-start': 'Елемент розташовуєть на початку контейнера.',
'flex-end': 'Елемент розташовуєть в кінці контейнера.',
'center': 'Елемент розташовуєть по центру контейнера.',
'baseline': 'Елемент вирівнюється по базовій лінії контейнера.',
'stretch': 'Елемент розтягується та займає ввесь доступний простір контейнера.',
'auto': 'Елемент успадковує батьківське значення властивісті align-items. Якщо батька немає значення встановиться - 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) {
block.style.alignSelf = form.options[i].value;
text.innerHTML = textArray[form.options[i].value];
}
}window.CP.exitedLoop(0);
};
//# sourceURL=pen.js
Простий приклад вирівнювання елементу
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: baseline;
}
.wrapper > div {
width: 17%;
padding: 16px;
text-align: center;
}
.gold {
background-color: gold;
height: 25%;
align-self: center;
}
.red {
background-color: red;
height: 50%;
}
.blue {
background-color: steelblue;
height: 12%;
}
Приклад роботи властивості
HTML
<div class="info">
<p>За допомогою властивості <code>align-self</code> ми можемо визначити горизонтальне вирівнювання окремо для кожного нащадка відносно гумового контейнера.</p>
<p>Ви бачите три ідентичні блоки, але для них задані різні значення для вирівнювання: <em>flex-start</em>, <em>center</em> й <em>flex-end</em> відповідно.</p>
</div>
<div class="wrapper">
<div class="block flex-start">
<p>flex-start</p>
</div>
<div class="block center">
<p>center</p>
</div>
<div class="block flex-end">
<p>flex-end</p>
</div>
</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;
background-color: #dedede;
height: 150px;
}
.block {
width: 150px;
line-height: 50px;
font-weight: 700;
background-color: gold;
padding: 0;
margin: 0;
text-align: center;
}
.block.flex-start {
align-self: flex-start;
}
.block.center {
align-self: center;
}
.block.flex-end {
align-self: flex-end;
}
Контейнер вирівнює всіх по верху, а третій елемент перевизначає це для себе через align-self: flex-end.
HTML
<div class="row">
<span>перший</span>
<span>другий</span>
<span class="own">третій</span>
<span>четвертий</span>
</div>
CSS
.row {
display: flex;
align-items: flex-start;
gap: 8px;
height: 160px;
padding: 8px;
border: 2px solid #0172ad;
}
.row span {
padding: 8px 12px;
background: #0172ad;
color: #fff;
}
.own {
align-self: flex-end;
background: #d81b60;
}
Коментарі
Коментарів ще немає — будьте першим!