Flexbox Zorluğu ve Sınırlaması
Buradaki zorluk, bir grup esnek öğeyi ortalamak ve bunları sarmada sola hizalamaktır. Ancak, satır başına sabit sayıda kutu olmadığı ve her kutu sabit genişlikte olmadığı sürece, bu şu anda flexbox ile mümkün değildir.
Söz konusu yayınlanmıştır kodu kullanarak, mevcut esnek kabı (sarar yeni esnek konteyner yaratabilir ul
bizi ortalamak için izin verecek), ul
ile justify-content: center
.
Daha sonra esnek öğeler ul
ile sola hizalanabilir justify-content: flex-start
.
#container {
display: flex;
justify-content: center;
}
ul {
display: flex;
justify-content: flex-start;
}
Bu, ortalanmış bir sola hizalı esnek öğeler grubu oluşturur.
Bu yöntemle ilgili sorun, belirli ekran boyutlarında sağ tarafında ul
artık ortalanmış görünmeyen bir boşluk oluşmasıdır .
Bunun nedeni, esnek mizanpajda (ve aslında genel olarak CSS'de) kap:
- bir öğenin ne zaman sarmalandığını bilmez;
- önceden işgal edilmiş bir alanın artık boş olduğunu bilmiyor ve
- dar düzeni daraltmak için genişliğini yeniden hesaplamaz.
Sağdaki beyaz alanın maksimum uzunluğu, kabın orada olmasını beklediği esnek öğenin uzunluğudur.
Aşağıdaki demoda, pencereyi yatay olarak yeniden boyutlandırarak beyaz alanın gelip gittiğini görebilirsiniz.
DEMO
Daha Pratik Bir Yaklaşım
Flexbox kullanmadan inline-block
ve ortam sorguları olmadan istenen düzen elde edilebilir .
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; } }
Yukarıdaki kod, aşağıdaki gibi sola hizalanmış alt öğelere sahip yatay olarak ortalanmış bir kap oluşturur:
DEMO
Diğer seçenekler