Alih-alih menggunakan align-self: centergunakan align-items: center.
Tidak perlu diubah flex-directionatau digunakan text-align.
Inilah kode Anda, dengan satu penyesuaian, agar semuanya berfungsi:
ul {
height: 100%;
}
li {
display: flex;
justify-content: center;
/* align-self: center; <---- REMOVE */
align-items: center; /* <---- NEW */
background: silver;
width: 100%;
height: 20%;
}
The align-selfproperti berlaku untuk item fleksibel . Kecuali Anda libukan item fleksibel karena induknya - the ul- tidak memiliki display: flexatau display: inline-flexmenerapkan.
Oleh karena itu, ulini bukan wadah fleksibel, libukan barang fleksibel, dan align-selftidak memiliki efek.
The align-itemsproperti ini mirip dengan align-self, kecuali itu berlaku untuk wadah fleksibel .
Karena liwadah fleksibel, align-itemsdapat digunakan untuk memusatkan elemen anak secara vertikal.
* {
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
Secara teknis, begini caranya align-itemsdan align-selfbekerja ...
The align-itemsproperti (pada wadah) menetapkan nilai default align-self(pada item). Karena itu, align-items: centerberarti semua item fleksibel akan diatur ke align-self: center.
Tetapi Anda dapat mengganti default ini dengan menyesuaikan align-selfpada item individual.
Misalnya, Anda mungkin menginginkan kolom ketinggian yang sama, sehingga wadah diatur ke align-items: stretch. Namun, satu item harus disematkan ke atas, sehingga diatur ke align-self: flex-start.
contoh
Bagaimana teks item fleksibel?
Beberapa orang mungkin bertanya-tanya bagaimana serangkaian teks ...
<li>This is the text</li>
adalah elemen anak dari li.
Alasannya adalah bahwa teks yang tidak secara eksplisit dibungkus oleh elemen tingkat inline secara algoritmik dibungkus oleh kotak inline. Ini menjadikannya elemen inline anonim dan anak dari induk.
Dari spec CSS:
9.2.2.1 Kotak inline anonim
Teks apa pun yang secara langsung terkandung di dalam elemen kontainer blok harus diperlakukan sebagai elemen inline anonim.
Spesifikasi flexbox menyediakan perilaku serupa.
4. Item Flex
Setiap anak dalam aliran dari wadah fleksibel menjadi item fleksibel, dan setiap rangkaian teks yang berdekatan yang langsung terkandung di dalam wadah fleksibel dibungkus dalam item fleksibel anonim.
Oleh karena itu, teks dalam liitem fleksibel.
align-items: baseline. Baik untuk ketinggian berbeda yang berasal dari karakter unicode yang berbeda, dll.