CSS Flexbox Yerleşim (Layout) Kılavuzu

Bu eksiksiz kılavuz, flexbox hakkında her şeyi açıklıyor ve üst öğe (flex kapsayıcı) ve alt öğeler (flex öğeler) için mümkün olan tüm farklı özelliklere odaklanıyor. Ayrıca tarihçe, örnekler, desenler ve tarayıcı destek tablosunu da içeriyor.

(Esnek Kutu) modülü Flexbox Layout( Ekim 2017 itibarıyla W3C Aday Tavsiyesi ), boyutları bilinmese ve/veya dinamik olsa bile (bu nedenle "esnek" kelimesi kullanılmıştır), bir konteyner içindeki öğeler arasında alanı daha verimli bir şekilde düzenlemeyi, hizalamayı ve dağıtmayı amaçlamaktadır.

Esnek yerleşimin temel fikri, kapsayıcıya, mevcut alanı en iyi şekilde dolduracak şekilde (çoğunlukla her türlü görüntüleme cihazına ve ekran boyutuna uyum sağlamak için) öğelerinin genişliğini/yüksekliğini (ve sırasını) değiştirme yeteneği kazandırmaktır. Esnek bir kapsayıcı, mevcut boş alanı doldurmak için öğeleri genişletir veya taşmayı önlemek için küçültür.

En önemlisi, flexbox düzeni, normal düzenlerin (dikey tabanlı blok ve yatay tabanlı satır içi) aksine yön bağımsızdır. Bu düzenler sayfalar için iyi çalışsa da, büyük veya karmaşık uygulamaları (özellikle yön değiştirme, yeniden boyutlandırma, germe, küçültme vb. söz konusu olduğunda) destekleme esnekliğinden yoksundurlar.

Not: Flexbox düzeni, bir uygulamanın bileşenleri ve küçük ölçekli düzenler için en uygunudur, Grid düzeni ise daha büyük ölçekli düzenler için tasarlanmıştır.

 

Flexbox tek bir özellik değil, bütün bir modül olduğundan, tüm özellik kümesi de dahil olmak üzere birçok şeyi içerir. Bunlardan bazıları kapsayıcıya (ebeveyn öğe, "flex kapsayıcı" olarak bilinir) ayarlanmak üzere tasarlanmışken, diğerleri çocuklara ("flex öğeler" olarak adlandırılır) ayarlanmak üzere tasarlanmıştır.

Eğer “normal” yerleşim hem blok hem de sıralı akış yönlerine dayanıyorsa, esnek yerleşim “esnek akış yönlerine” dayanır. Lütfen, esnek yerleşimin temel fikrini açıklayan bu teknik şartnamedeki şekle bir göz atın.

Flexbox terminolojisini açıklayan bir diyagram. Flexbox'ın ana ekseni boyunca olan boyuta ana boyut, diğer yöne ise çapraz boyut denir. Bu boyutların ana başlangıç, ana bitiş, çapraz başlangıç   ve çapraz bitiş noktaları vardır.

main axisÖğeler ya (başlangıçtan main-startbitişe main-end) ya da çapraz eksen (başlangıçtan cross-startbitişe cross-end) doğrultusunda yerleştirilecektir .

  • Ana eksen – Esnek bir konteynerin ana ekseni, esnek öğelerin yerleştirildiği birincil eksendir. Dikkat edin, bu eksen her zaman yatay olmak zorunda değildir; özelliğe bağlıdır flex-direction(aşağıya bakınız).
  • main-start | main-end – Esnek öğeler, konteynerin içine main-start'tan başlayıp main-end'e doğru yerleştirilir.
  • Ana boyut – Esnek bir öğenin genişliği veya yüksekliği, hangisi ana boyutta ise, öğenin ana boyutudur. Esnek öğenin ana boyut özelliği, ana boyutta olan 'genişlik' veya 'yükseklik' özelliğidir.
  • Çapraz eksen – Ana eksene dik olan eksene çapraz eksen denir. Yönü, ana eksenin yönüne bağlıdır.
  • Çapraz başlangıç | Çapraz bitiş – Esnek borular, malzemelerle doldurulur ve esnek boru kabının çapraz başlangıç tarafından başlayarak çapraz bitiş tarafına doğru yerleştirilir.
  • Çapraz boyut – Esnek bir öğenin genişliği veya yüksekliği, hangisi çapraz boyutta ise, öğenin çapraz boyutudur. Çapraz boyut özelliği, çapraz boyutta bulunan 'genişlik' veya 'yükseklik' değerlerinden hangisi ise odur.

Üst öğenin (flex container) özellikleri

display

Bu, verilen değere bağlı olarak satır içi veya blok şeklinde bir esnek kapsayıcı tanımlar. Doğrudan altındaki tüm öğeler için esnek bir bağlam sağlar.

.container {
  display: flex; /* or inline-flex */
}

CSS sütunlarının esnek bir kapsayıcı üzerinde hiçbir etkisi olmadığını unutmayın.

flex-direction
Esneklik yönünün dört olası değeri gösterilmektedir: yukarıdan aşağıya, aşağıdan yukarıya, sağdan sola ve soldan sağa.


Bu, ana ekseni belirler ve böylece esnek öğelerin esnek konteynere yerleştirilme yönünü tanımlar. Flexbox (isteğe bağlı sarmalama hariç) tek yönlü bir yerleşim konseptidir. Esnek öğelerin öncelikle yatay satırlar veya dikey sütunlar halinde yerleştirildiğini düşünün.

.container {
  flex-direction: row | row-reverse | column | column-reverse;
}
  • row(varsayılan): soldan sağa ltr; sağdan solartl
  • row-reverse: sağdan sola ltr; soldan sağartl
  • column: aynı, rowancak yukarıdan aşağıya
  • column-reverse: aynı, row-reverseancak aşağıdan yukarıya doğru

flex-wrap

İki sıra kutu, birincisi ikincisinin üzerine doğru sarılıyor.

Varsayılan olarak, esnek öğeler tek bir satıra sığmaya çalışır. Bu özelliği kullanarak bunu değiştirebilir ve öğelerin gerektiği gibi satır sonuna kadar uzanmasına izin verebilirsiniz.

.container {
  flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(varsayılan): tüm esnek öğeler tek satırda olacaktır.
  • wrapEsnek öğeler, yukarıdan aşağıya doğru birden fazla satıra yayılacaktır.
  • wrap-reverseEsnek öğeler, alttan üste doğru birden fazla satıra yayılacaktır.

Burada bazı görsel örneklerflex-wrap mevcut .

flex-flow

Bu , esnek konteynerin ana ve çapraz eksenlerini birlikte tanımlayan flex-directionve özelliklerinin kısaltılmış halidir . Varsayılan değer .flex-wraprow nowrap

.container {
  flex-flow: column wrap;
}

 

justify-content
Esnek bir konteyner içindeki esnek öğeler, farklı aralık seçeneklerini göstermektedir.


Bu, ana eksen boyunca hizalamayı tanımlar. Bir satırdaki tüm esnek öğeler esnek olmadığında veya esnek olsalar bile maksimum boyutlarına ulaştıklarında kalan fazla boş alanın dağıtılmasına yardımcı olur. Ayrıca, öğeler satırı aştığında hizalama üzerinde bir miktar kontrol sağlar.

.container {
  justify-content: flex-start | flex-end | center | space-between | space-around | space-evenly | start | end | left | right ... + safe | unsafe;
}
  • flex-start(varsayılan): öğeler esnek yönün başlangıcına doğru paketlenir.
  • flex-endÜrünler, esnek yönün sonuna doğru paketlenir.
  • startÜrünler yönün başlangıcına doğru paketlenir writing-mode.
  • endÜrünler yönün sonuna doğru paketlenir writing-mode.
  • left: Ürünler, kabın sol kenarına doğru paketlenir; eğer bu durum mantıklı değilse flex-direction, o zaman şu şekilde davranır start: .
  • right: Ürünler, kabın sağ kenarına doğru paketlenir; eğer bu durum mantıklı değilse flex-direction, o zaman şu şekilde davranır end: .
  • centerÖğeler çizgi boyunca ortalanmıştır.
  • space-betweenÜrünler sıraya eşit olarak dağıtılmıştır; ilk ürün başlangıç çizgisinde, son ürün bitiş çizgisindedir.
  • space-aroundÖğeler, etraflarında eşit boşluk bırakılarak satır boyunca eşit olarak dağıtılmıştır. Görsel olarak boşlukların eşit olmadığını unutmayın, çünkü tüm öğelerin her iki tarafında da eşit boşluk vardır. İlk öğe, konteyner kenarına karşı bir birim boşluk bırakırken, bir sonraki öğe ile arasında iki birim boşluk bulunur, çünkü bir sonraki öğenin kendine özgü bir boşluğu vardır.
  • space-evenlyÖğeler, herhangi iki öğe arasındaki boşluk (ve kenarlara olan boşluk) eşit olacak şekilde dağıtılır.

Tarayıcıların bu değerlere verdiği desteğin incelikli olduğunu unutmayın. Örneğin, space-betweenEdge'in bazı sürümlerinde hiç destek görmedi ve Chrome'da henüz start/end/left/right özellikleri yok. MDN'de ayrıntılı tablolar mevcut . En güvenli değerler flex-start, flex-end, ve ' dir center.

Bu değerlerle eşleştirebileceğiniz iki ek anahtar kelime daha vardır: safeve unsafe. Kullanımı safe, bu tür konumlandırmayı nasıl yaparsanız yapın, bir öğeyi ekran dışına (örneğin üst kısma) iterek içeriğin kaydırılamayacak şekilde görüntülenmesini (veri kaybı olarak adlandırılır) engeller.

 

align-items
Farklı hizalama seçeneklerinin gösterimi; örneğin tüm kutuların esnek bir üst öğenin üstüne, altına, uzatılmış halde veya bir taban çizgisi boyunca sabitlenmesi gibi.


Bu, esnek öğelerin geçerli satırdaki çapraz eksen boyunca nasıl yerleştirileceğine ilişkin varsayılan davranışı tanımlar . Bunu justify-content, çapraz eksen (ana eksene dik) için olan sürüm olarak düşünün.

.container {
  align-items: stretch | flex-start | flex-end | center | baseline | first baseline | last baseline | start | end | self-start | self-end + ... safe | unsafe;
}
  • stretch(varsayılan): Konteyneri tamamen dolduracak şekilde genişlet (minimum genişlik/maksimum genişliğe yine de dikkat et)
  • flex-start/ start/ self-start: Öğeler çapraz eksenin başlangıcına yerleştirilir. Bunlar arasındaki fark ince olup, kurallara uymak flex-directionveya writing-modekurallara riayet etmekle ilgilidir.
  • flex-end/ end/ self-end: Öğeler çapraz eksenin sonuna yerleştirilir. Fark yine ince bir ayrıntıdır ve flex-directionkurallara uymak ile writing-modekurallara uymamak arasındaki farkla ilgilidir.
  • centerÖğeler çapraz eksenin ortasına yerleştirilmiştir.
  • baselineÖğeler, taban çizgileri hizalanacak şekilde hizalanmıştır.

" safeVe unsafe" değiştirici anahtar kelimeleri, bu anahtar kelimelerin geri kalanıyla birlikte kullanılabilir (ancak tarayıcı desteğine dikkat edin ) ve içeriğin erişilemez hale gelmesine neden olacak şekilde öğelerin hizalanmasını önlemenize yardımcı olur.

 

align-content
`align-content` özelliğinin örnekleri arasında, bir grup öğenin üstte veya altta kümelendiği, alanı dolduracak şekilde uzandığı veya aralarında boşluk bulunduğu durumlar yer alır.


Bu, çapraz eksende fazladan boşluk olduğunda, justify-contentana eksen içindeki tek tek öğeleri hizalamaya benzer şekilde, esnek bir kapsayıcının içindeki satırları hizalar.

Not: Bu özellik yalnızca, veya flex-wrapolarak ayarlanmış çok satırlı esnek konteynerlerde geçerlidir . Tek satırlı esnek bir konteyner (yani varsayılan değerine ayarlanmışsa ), bu özelliği yansıtmaz .wrapwrap-reverseflex-wrapno-wrapalign-content

.container {
  align-content: flex-start | flex-end | center | space-between | space-around | space-evenly | stretch | start | end | baseline | first baseline | last baseline + ... safe | unsafe;
}
  • normal(varsayılan): Öğeler, hiçbir değer ayarlanmamış gibi varsayılan konumlarında paketlenir.
  • flex-start/ start: Konteynerin başına yerleştirilen öğeler. (Daha fazla desteklenen) yönü dikkate alırken , yönü flex-startde dikkate alır .flex-directionstartwriting-mode
  • flex-end/ end: Konteynerin sonuna kadar paketlenmiş ürünler. (Daha fazla destek) flex-endyönü korurken flex-direction, son kısım da yönü korur writing-mode.
  • center: Konteynerin ortasına yerleştirilmiş öğeler
  • space-betweenÖğeler eşit olarak dağıtılmıştır; ilk satır konteynerin başında, son satır ise sonundadır.
  • space-aroundÖğeler, her satırın etrafında eşit boşluk bırakılarak eşit şekilde dağıtılmıştır.
  • space-evenlyÖğeler, etraflarında eşit boşluk bırakılarak eşit şekilde dağıtılmıştır.
  • stretchÇizgiler kalan boşluğu dolduracak şekilde uzanıyor.

" safeVe unsafe" değiştirici anahtar kelimeleri, bu anahtar kelimelerin geri kalanıyla birlikte kullanılabilir (ancak tarayıcı desteğine dikkat edin ) ve içeriğin erişilemez hale gelmesine neden olacak şekilde öğelerin hizalanmasını önlemenize yardımcı olur.

gap, row-gap, column-gap

Bu gapözellik, esnek öğeler arasındaki boşluğu açıkça kontrol eder. Bu boşluğu yalnızca dış kenarlarda olmayan öğeler arasında uygular .

.container {
  display: flex;
  ...
  gap: 10px;
  gap: 10px 20px; /* row-gap column gap */
  row-gap: 10px;
  column-gap: 20px;
}

Bu davranış, minimum bir oluk olarak düşünülebilir ; eğer oluk bir şekilde daha büyükse (örneğin bir şey yüzünden justify-content: space-between;), o zaman boşluk ancak o alanın daha küçük olması durumunda etkili olacaktır.

Sadece flexbox için değil, gapgrid ve çok sütunlu düzenlerde de çalışır.

flex items
order
Esnek kutunun sıralamasını gösteren diyagram. İçindeki öğeler 1 1 1 2 3, -1 1 2 5 ve 2 2 99 olan bir konteyner.


Varsayılan olarak, esnek öğeler kaynak sırasına göre düzenlenir. Ancak, bu orderözellik, esnek kapsayıcıda görünme sıralarını kontrol eder.

.item {
  order: 5; /* default is 0 */
}

Aynı öğeler orderkaynak sırasına geri döner.

flex-grow
İki sıra halinde dizilmiş öğelerden ilki, eşit boyutlarda ve eşit flex-grow numaralarına sahip öğelerden oluşurken, ikinci sıradaki öğenin genişliği iki katına çıkarılmıştır çünkü değeri 1 yerine 2'dir.


Bu, esnek bir öğenin gerektiğinde büyüyebilme yeteneğini tanımlar. Oran görevi gören birimsiz bir değer kabul eder. Öğenin esnek konteyner içindeki mevcut alanın ne kadarını kaplaması gerektiğini belirler.

Eğer tüm öğeler flex-growolarak ayarlanmışsa 1, konteynerdeki kalan alan tüm alt öğelere eşit olarak dağıtılır. Alt öğelerden birinin değeri ise 2, o alt öğe diğerlerinin her birinin kapladığı alanın iki katını kaplar (ya da en azından bunu deneyecektir).

.item {
  flex-grow: 4; /* default 0 */
}

Negatif sayılar geçersizdir.

flex-shrink

Bu, esnek bir öğenin gerektiğinde küçülebilme özelliğini tanımlar.

.item {
  flex-shrink: 3; /* default 1 */
}

Negatif sayılar geçersizdir.

flex-basis

Bu, kalan alan dağıtılmadan önce bir öğenin varsayılan boyutunu tanımlar. Bu bir uzunluk (örneğin %20, 5rem, vb.) veya bir anahtar kelime olabilir. Anahtar autokelime, "genişlik veya yükseklik özelliğime bak" anlamına gelir (bu, main-sizekullanımdan kaldırılana kadar geçici olarak anahtar kelimeyle yapılıyordu). Anahtar kelime, "öğenin içeriğine göre boyutlandır" anlamına gelir - bu anahtar kelime henüz iyi desteklenmediğinden, test edilmesi ve kardeşleri olan , ve'nin contentne yaptığını bilmek zordur .max-contentmin-contentfit-content

.item {
  flex-basis:  | auto; /* default auto */
}

Eğer olarak ayarlanırsa 0, içeriğin etrafındaki ekstra boşluk hesaba katılmaz. Eğer olarak ayarlanırsa auto, ekstra boşluk değerine göre dağıtılır flex-grow. Bu grafiğe bakın.

flex

flex-grow, flex-shrinkBu, ve'nin birleşiminin kısaltılmış halidir flex-basis. İkinci ve üçüncü parametreler ( flex-shrinkve flex-basis) isteğe bağlıdır. Varsayılan değerdir 0 1 auto, ancak bunu tek bir sayı değeriyle ayarlarsanız, örneğin flex: 5;, bu değeri %0'a değiştirir flex-basis, yani ayarlamak gibidir flex-grow: 5; flex-shrink: 1; flex-basis: 0%;.

.item {
  flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

Bireysel özellikleri ayarlamak yerine bu kısaltılmış özelliği kullanmanız önerilir . Kısaltılmış özellik, diğer değerleri akıllıca ayarlar.

 

align-self
`align-self` değeri olan bir öğe, diğer tüm öğelerin bulunduğu üst kısım yerine, esnek üst öğenin alt kısmına konumlandırılır.


Bu, varsayılan hizalamanın (veya tarafından belirtilen hizalamanın align-items) tek tek esnek öğeler için geçersiz kılınmasına olanak tanır.

align-itemsMevcut değerleri anlamak için lütfen açıklamaya bakın .

.item {
  align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

Şunu unutmayın ki float, clearve vertical-alignesnek öğeler üzerinde hiçbir etkisi yoktur.

 

Kaynak

 

 

Yükleniyor...
Yükleniyor...