Tantangan & Batasan Flexbox
Tantangannya adalah memusatkan sekelompok item fleksibel dan meratakannya ke kiri pada bungkus. Tetapi kecuali jika ada sejumlah kotak tetap per baris, dan setiap kotak memiliki lebar tetap, ini saat ini tidak mungkin dengan flexbox.
Menggunakan kode yang diposting dalam pertanyaan, kita bisa membuat wadah flex baru yang membungkus wadah flex saat ini ( ul
), yang akan memungkinkan kita untuk memusatkan ul
dengan justify-content: center
.
Kemudian item flex ul
bisa diratakan dengan kiri justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Ini membuat grup item flex rata kiri di tengah.
Masalah dengan cara ini adalah pada ukuran layar tertentu akan ada celah di sebelah kanan ul
, sehingga tidak lagi tampak di tengah.
Ini terjadi karena dalam tata letak fleksibel (dan, sebenarnya, CSS secara umum) penampung:
- tidak tahu kapan sebuah elemen terbungkus;
- tidak tahu bahwa ruang yang sebelumnya ditempati sekarang kosong, dan
- tidak menghitung ulang lebarnya untuk mengecilkan tata letak yang lebih sempit.
Panjang maksimum whitespace di sebelah kanan adalah panjang item flex yang diharapkan container berada di sana.
Dalam demo berikut, dengan mengubah ukuran jendela secara horizontal, Anda dapat melihat whitespace datang dan pergi.
DEMO
Pendekatan yang Lebih Praktis
Tata letak yang diinginkan dapat dicapai tanpa penggunaan flexbox inline-block
dan kueri media .
HTML
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
</ul>
CSS
ul {
margin: 0 auto;
width: 1200px;
padding-left: 0;
font-size: 0;
}
li {
display: inline-block;
font-size: 18px;
list-style-type: none;
width: 150px;
height: 50px;
line-height: 50px;
margin: 15px 25px;
box-sizing: border-box;
text-align: center;
}
@media screen and (max-width: 430px) { ul { width: 200px; } }
@media screen and (min-width: 431px) and (max-width: 630px) { ul { width: 400px; } }
@media screen and (min-width: 631px) and (max-width: 830px) { ul { width:600px; } }
@media screen and (min-width: 831px) and (max-width: 1030px) { ul { width: 800px; } }
@media screen and (min-width: 1031px) and (max-width: 1230px) { ul { width: 1000px; } }
Kode di atas merender wadah yang berada di tengah horizontal dengan elemen anak rata kiri seperti ini:
DEMO
Pilihan lain