flex-wrap: tek satır ya da gerektiği kadar
Varsayılan olarak bir flex kapsayıcı bütün öğelerini tek satırda tutar (flex-wrap: nowrap) ve sığsınlar diye onları küçültür. flex-wrap: wrap ise boyutlarını korumalarına ve bunun yerine bir sonraki satıra geçmelerine izin verir:
Her öğe 100px istiyor, 340px'lik bir kutuda beş tane. Beş öğe ve dört 8px'lik boşluk 532px ister, bu yüzden alt satıra geçme olmadan her öğe yaklaşık 62px'e sıkışıyor, çünkü flex öğeleri varsayılan olarak küçülür. wrap ile 100px kalıyorlar: üçü ilk satıra sığıyor, diğer ikisi ikinci satıra geçiyor.
flex-wrap değerleri
| Değer | Ne olur |
|---|---|
nowrap (varsayılan) | Tek satır. Öğeler küçülür, daha fazla küçülemediklerinde kapsayıcıdan taşar |
wrap | Sığmayan öğeler aşağıda yeni bir satır başlatır |
wrap-reverse | Aynısı, ama yeni satırlar yukarı doğru dizilir: ilk satır en alttadır |
Öğelerin alt satıra geçmesini izle
Kapsayıcının genişliğini değiştirmek için kaydırıcıyı sürükle. Gösterge satırları sayar ve her birinde kaç öğe olduğunu söyler:
400px'te dört 90px'lik öğe ve üç 8px'lik boşluk (384px) bir satıra sığar, yani 4 + 2 elde edersin. 620px'e doğru sürükle, altısı da tek satıra sığar; 120px'e doğru sürükle, her öğe kendi satırını alır.
flex-direction: row ya da column
flex-direction, öğelerin aktığı yönü, yani ana ekseni belirler:
| Değer | Öğeler nasıl akar | İlk öğe |
|---|---|---|
row (varsayılan) | yan yana, yazı yönünde | satırın başında |
row-reverse | yan yana, ters | satırın sonunda |
column | üst üste, yukarıdan aşağı | en üstte |
column-reverse | üst üste, aşağıdan yukarı | en altta |
İki row kutusunda öğeler kutunun tam yüksekliğine esniyor, çünkü align-items: stretch satırın karşısında çalışır. column kutularında ise aynı nedenle tam genişliğe esniyorlar. Eksenler döndü ve her hizalama özelliği de onlarla birlikte döndü (justify-content sayfası bunu ayrıntılı gösteriyor).
flex-flow: ikisi tek satırda
flex-flow, önce flex-direction sonra flex-wrap için kısa yazımdır:
.cards { flex-flow: row wrap; } /* flex-direction: row; flex-wrap: wrap; */
.stack { flex-flow: column nowrap; } /* flex-direction: column; flex-wrap: nowrap; */
wrap ile ve medya sorgusu olmadan esnek kartlar
Her öğeye flex: 1 1 180px ile bir başlangıç boyutu ver ve satırın kırılmasına izin ver. Her öğe kendi satırını dolduracak şekilde büyür ve bir satıra 180px'lik bir öğe daha sığmadığında bir sonraki alt satıra geçer:
Yaklaşık 800px genişliğindeki bir önizlemede ilk satıra üç kart sığar (her biri yaklaşık 253px) ve son ikisi ikinci satırı paylaşır; orada her biri yaklaşık 386px'e büyür. Flexbox böyle çalışır: her satır kendi alanını paylaştırır, bu yüzden kısa bir son satırdaki kartlar yukarıdakilerden daha geniş olur. Son kartın diğerleriyle aynı genişlikte kalmasını istiyorsan bunun yerine repeat(auto-fill, minmax(180px, 1fr)) ile grid kullan (bkz. grid sayfası).
align-content: satırları aralamak
Bir kapsayıcı kırıldığında ve satırlarından uzun olduğunda satırların nereye gideceğine align-content karar verir. justify-content ile aynı değerleri, artı stretch alır:
İlk kutuda iki satır da üstte duruyor. İkincisinde ilk satır üstte, ikincisi altta ve bütün boş yükseklik aralarında.
Ters sıra ve erişilebilirlik
row-reverse, column-reverse ve wrap-reverse yalnızca öğelerin nereye çizildiğini değiştirir. Ekran okuyucular ve Tab tuşu hâlâ HTML sırasını takip eder, bu yüzden bir klavye kullanıcısı öğeler arasında gördüğünün ters yönünde ilerler. Ters çevirmeyi yalnızca görsel etki için kullan; sıra bir anlam taşıyorsa onu HTML'de değiştir.
Sık yapılan hatalar
- Alt satıra geçmek yerine küçülen öğeler.
flex: 1olan öğeler 0 değerindeki birflex-basis'ten başlar ve tek satıra sıkışır. Onlaraflex: 1 1 200pxgibi gerçek bir başlangıç boyutu ver. flex-wrap'i öğelere vermek. Yeri flex kapsayıcıdır.- Kırılan satırları aralamak için
align-itemskullanmak. Bu, öğeleri her satırın içinde hizalar; satırların kendisialign-contentile hareket eder. - Bütün satıra esnemiş yalnız bir son öğe. Bu, tek öğeli bir satırdaki
flex-grow'dur. Her kartın aynı genişlikte olması gerekiyorsa grid kullan. flex-direction: column'ın bir yüksekliği doldurmasını beklemek. Bir sütun kapsayıcı, ona birheightvermedikçe yalnızca içeriği kadar uzundur, bu yüzdenjustify-content'in çalışacak yeri olmaz.
Sıkça Sorulan Sorular
flex-wrap: wrap ne işe yarar?
Flex öğelerinin tek bir satıra sığmadıklarında yeni bir satıra geçmesine izin verir. Varsayılan nowrap ile öğeler tek satırda kalır ve küçülür ya da daha fazla küçülemiyorlarsa kapsayıcıdan taşar.
flex-wrap neden çalışmıyor?
Alt satıra geçme yalnızca öğelerin başlangıç boyutlarının toplamı kapsayıcıdan fazla olduğunda olur. flex: 1 olan öğeler 0 değerindeki bir flex-basis'ten başlar, bu yüzden hiçbir zaman alt satıra geçmez; onlara gerçek bir başlangıç boyutu ver (flex: 1 1 200px ya da width: 200px). Ayrıca flex-wrap'in öğelere değil flex kapsayıcıya verildiğini kontrol et.
flex-direction row ile column arasındaki fark nedir?
row (varsayılan) öğeleri yazı yönünde yan yana koyar, column ise onları yukarıdan aşağıya üst üste dizer. Ana eksen de onunla döner, bu yüzden bir sütunda justify-content dikeyde, align-items yatayda çalışır.
flex-flow nedir?
flex-direction ve flex-wrap için tek bildirimlik bir kısa yazımdır: flex-flow: row wrap;, flex-direction: row; flex-wrap: wrap; ile aynıdır.
align-items ile align-content arasındaki fark nedir?
align-items öğeleri kendi satırlarının içine yerleştirir. align-content ise satırların kendisini kapsayıcının içine yerleştirir, bu yüzden yalnızca kapsayıcıda flex-wrap: wrap olduğunda ve kapsayıcı satırlarından uzun olduğunda önemlidir.