Menu

CSS flex-wrap ve flex-direction: Satırlar ve Sütunlar

flex-wrap, flex öğelerinin tek bir satıra sıkışıp sıkışmayacağına ya da bir sonrakine geçeceğine, flex-direction ise bir satırda mı yoksa bir sütunda mı akacaklarına karar verir. İkisini canlı örneklerle, flex-flow kısa yazımını, align-content'i ve medya sorgusu olmadan esnek bir kart satırını öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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ğerNe olur
nowrap (varsayılan)Tek satır. Öğeler küçülür, daha fazla küçülemediklerinde kapsayıcıdan taşar
wrapSığmayan öğeler aşağıda yeni bir satır başlatır
wrap-reverseAynı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ündesatırın başında
row-reverseyan yana, terssatı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: 1 olan öğeler 0 değerindeki bir flex-basis'ten başlar ve tek satıra sıkışır. Onlara flex: 1 1 200px gibi 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-items kullanmak. Bu, öğeleri her satırın içinde hizalar; satırların kendisi align-content ile 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 bir height vermedikçe yalnızca içeriği kadar uzundur, bu yüzden justify-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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA