Cara Memusatkan Elemen secara Vertikal dan Horizontal di Flexbox
Di bawah ini adalah dua solusi pemusatan umum.
Satu untuk item flex rata-rata ( flex-direction: column
) dan yang lain untuk item flex rata-rata ( flex-direction: row
).
Dalam kedua kasus, ketinggian div terpusat dapat bervariasi, tidak terdefinisi, tidak diketahui, apa pun. Ketinggian div terpusat tidak masalah.
Inilah HTML untuk keduanya:
<div id="container"><!-- flex container -->
<div class="box" id="bluebox"><!-- flex item -->
<p>DIV #1</p>
</div>
<div class="box" id="redbox"><!-- flex item -->
<p>DIV #2</p>
</div>
</div>
CSS (tidak termasuk gaya dekoratif)
Ketika item fleksibel ditumpuk secara vertikal:
#container {
display: flex; /* establish flex container */
flex-direction: column; /* make main axis vertical */
justify-content: center; /* center items vertically, in this case */
align-items: center; /* center items horizontally, in this case */
height: 300px;
}
.box {
width: 300px;
margin: 5px;
text-align: center; /* will center text in <p>, which is not a flex item */
}
DEMO
Ketika item fleksibel ditumpuk secara horizontal:
Sesuaikan flex-direction
aturan dari kode di atas.
#container {
display: flex;
flex-direction: row; /* make main axis horizontal (default setting) */
justify-content: center; /* center items horizontally, in this case */
align-items: center; /* center items vertically, in this case */
height: 300px;
}
DEMO
Memusatkan isi item fleksibel
Ruang lingkup konteks pemformatan fleksibel terbatas pada hubungan orangtua-anak. Keturunan dari wadah fleksibel di luar anak-anak tidak berpartisipasi dalam tata letak fleksibel dan akan mengabaikan sifat fleksibel. Pada dasarnya, sifat fleksibel tidak dapat diwariskan di luar anak-anak.
Oleh karena itu, Anda akan selalu perlu menerapkan display: flex
atau display: inline-flex
ke elemen induk untuk menerapkan sifat fleksibel pada anak.
Untuk memusatkan teks secara vertikal dan / atau horizontal atau konten lain yang terkandung dalam item fleksibel, buat item tersebut sebagai wadah fleksibel (bersarang), dan ulangi aturan pemusatan.
.box {
display: flex;
justify-content: center;
align-items: center; /* for single line flex container */
align-content: center; /* for multi-line flex container */
}
Lebih detail di sini: Bagaimana cara menyelaraskan teks secara vertikal di dalam flexbox?
Atau, Anda dapat menerapkan margin: auto
ke elemen konten item fleksibel.
p { margin: auto; }
Pelajari tentang auto
margin fleksibel di sini: Metode untuk Menyelaraskan Item Flex (lihat kotak # 56).
Memusatkan beberapa baris item fleksibel
Ketika wadah fleksibel memiliki banyak garis (karena pembungkus) align-content
properti akan diperlukan untuk penyelarasan sumbu-silang.
Dari spec:
8.4. Packing Flex Lines: align-content
properti
The align-content
properti disejajarkan garis wadah fleksibel dalam waktu wadah fleksibel ketika ada ruang ekstra dalam salib sumbu, mirip dengan bagaimana justify-content
disejajarkan item individual dalam main-axis.
Catatan, properti ini tidak berpengaruh pada wadah fleksibel satu baris.
Lebih detail di sini: Bagaimana cara flex-wrap bekerja dengan align-self, align-items, dan align-content?
Dukungan browser
Flexbox didukung oleh semua browser utama, kecuali IE <10 . Beberapa versi browser terbaru, seperti Safari 8 dan IE10, memerlukan awalan vendor . Untuk cara cepat menambahkan awalan, gunakan Autoprefixer . Lebih detail dalam jawaban ini .
Solusi pemusatan untuk browser yang lebih lama
Untuk solusi pemusatan alternatif menggunakan tabel CSS dan properti pemosisian, lihat jawaban ini: https://stackoverflow.com/a/31977476/3597276