Zamiast używać align-self: centeruse align-items: center.
Nie ma potrzeby zmiany flex-directionani używania text-align.
Oto twój kod z jedną korektą, aby wszystko działało:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
align-selfWłaściwość dotyczy Flex przedmiotów . Tyle że twój linie jest elementem elastycznym, ponieważ jego element nadrzędny - ulnie ma - display: flexlub nie został display: inline-flexzastosowany.
Dlatego ulnie jest to elastyczny pojemnik, linie jest elastyczny i align-selfnie ma żadnego efektu.
align-itemsNieruchomość jest podobna do align-self, oprócz tego, że odnosi się do typu flex pojemnikach .
Ponieważ lijest to elastyczny pojemnik, align-itemsmożna go użyć do pionowego wyśrodkowania elementów potomnych.
* {
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>
demo codepen
Technicznie oto jak align-itemsi jak align-selfdziała ...
align-itemsNieruchomość (na zbiorniku) ustawia domyślną wartość align-self(w sztukach). Oznacza align-items: centerto , że wszystkie elementy Flex zostaną ustawione na align-self: center.
Możesz jednak zmienić to ustawienie domyślne, dostosowując align-selfposzczególne elementy.
Na przykład możesz chcieć kolumn o jednakowej wysokości, więc kontener jest ustawiony na align-items: stretch. Jednak jeden element musi być przypięty do góry, więc jest ustawiony na align-self: flex-start.
przykład
W jaki sposób tekst jest elementem elastycznym?
Niektórzy ludzie mogą się zastanawiać, jak ciąg tekstu ...
<li>This is the text</li>
jest elementem potomnym li.
Powodem jest to, że tekst, który nie jest jawnie zawinięty przez element poziomu śródliniowego, jest algorytmicznie zawijany przez pole śródliniowe. To sprawia, że jest anonimowym elementem wbudowanym i dzieckiem elementu nadrzędnego.
Ze specyfikacji CSS:
9.2.2.1 Anonimowe pola śródliniowe
Każdy tekst zawarty bezpośrednio w elemencie kontenera bloku musi być traktowany jako anonimowy element wbudowany.
Specyfikacja Flexbox zapewnia podobne zachowanie.
4. Zegnij przedmioty
Każde dziecko przepływające w kontenerze elastycznym staje się elementem elastycznym, a każdy ciągły ciąg tekstu, który jest bezpośrednio zawarty w elastycznym kontenerze, jest zawijany w anonimowy element elastyczny.
Dlatego tekst w lielemencie jest elementem elastycznym.
align-items: baseline. Dobre dla różnych wysokości pochodzących z różnych znaków Unicode itp.