CSS align-self — вирівнювання одного елемента поперек осі


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

Властивість align-self

Якщо для нащадку гнучкого елементу заданий відступ зі значенням auto, align-self ігнорується.

Властивість не впливає на елементи таблиці.

Хоча початково властивість була створена тільки для гнучких контейнерів, зараз її можна застосовувати і для блокових контейнерів та сіток (CSS Grid)

автор: Svitlana

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

автор: NagarD

Порада

Не забувайте, що властивість align-self перевизначає властивість align-items!

автор: Svitlana

Синтаксис

align-self: auto|stretch|center|flex-start|flex-end|baseline|initial|inherit;

Властивість align-self може отримувати 8 значень:

auto

Елемент успадковує батьківське значення властивісті align-items. Якщо батька немає значення встановиться - stretch. Без задання.

автор: Svitlana

stretch

Елемент розтягується та займає ввесь доступний простір контейнера.

автор: Svitlana

center

Елемент розташовується по центру контейнера.

автор: Svitlana

flex-start

Елемент розташовується на початку контейнера.

автор: Svitlana

flex-end

Елемент розташовується в кінці контейнера.

автор: Svitlana

baseline

Елемент вирівнюється по базовій лінії контейнера.

автор: Svitlana

initial

Встановлює властивість у значення без задання

автор: Svitlana

inherit

Вказує на спадковість властивості від свого батьківського елемента (якщо відповідна властивість встановлена)

автор: Svitlana

Значення без задання: auto
Наслідує: Ні
Анімується: Ні
JavaScript синтаксис: object.style.alignSelf="center"

Переглядачі

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

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

}));
автор: Svitlana

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

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

Простий приклад вирівнювання елементу

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%;
}
автор: Svitlana

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

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

Контейнер вирівнює всіх по верху, а третій елемент перевизначає це для себе через 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;
}
автор: NagarD

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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