Замість align-self: center
використання align-items: center
.
Не потрібно змінювати flex-direction
чи використовувати text-align
.
Ось ваш код, за допомогою одного коригування, щоб він працював:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
align-self
Властивість застосовується до нежестким деталей . За винятком того, що ваш li
елемент не є гнучким, тому що його батьківський - той ul
- не має display: flex
або display: inline-flex
застосував.
Отже, ul
не є гнучким контейнером, li
не є гнучким елементом і align-self
не має ефекту.
align-items
Властивість аналогічно align-self
, за винятком того, що відноситься до згинають контейнери .
Оскільки li
є гнучким контейнером, align-items
його можна використовувати для вертикального центрування дочірніх елементів.
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; */
align-items: center;
background: silver;
width: 100%;
height: 20%;
}
<ul>
<li>This is the text</li>
</ul>
демонстраційний код
Технічно ось як align-items
і align-self
працювати ...
align-items
Властивість (на контейнері) встановлює значення за замовчуванням align-self
(по пунктам). Тому align-items: center
означає, що всі гнучкі елементи будуть встановлені align-self: center
.
Але ви можете змінити цей за замовчуванням, відкоригувавши align-self
окремі елементи.
Наприклад, ви можете мати стовпчики однакової висоти, тому контейнер встановлений у align-items: stretch
. Однак один елемент потрібно закріпити вгорі, щоб його встановити align-self: flex-start
.
приклад
Як текст є флекс-елементом?
Деяким може бути цікаво, як працює текст ...
<li>This is the text</li>
є дочірнім елементом li
.
Причина полягає в тому, що текст, який явно не обернутий вбудованим елементом, алгоритмічно загортається вбудованим полем. Це робить його анонімним вбудованим елементом і дитиною батька.
З специфікації CSS:
9.2.2.1 Анонімні вставки
Будь-який текст, який безпосередньо міститься в блоці елемента контейнера, повинен розглядатися як анонімний вбудований елемент.
Специфікація flexbox передбачає подібну поведінку.
4. Гнучкі предмети
Кожна дитина, що надходить у контейнер flex, стає гнучким елементом, і кожен безперервний текст, який безпосередньо міститься у контейнері flex, загортається в анонімний елемент flex.
Отже, текст у тексті li
є гнучким елементом.
align-items: baseline
. Добре підходить для різних висот, що надходять з різних символів unicode тощо