Flexbox

Flexbox Nedir? CSS Düzeninin Temel Mantığı

Flexbox, öğeleri tek bir ana eksende düzenler. Kapsayıcıya yön, hizalama, aralık ve taşma kuralları ekleyerek menü, form ve kart içi yerleşimler kurabilirsiniz.

CSS Öğren Editörlüğü · 6 dk okuma
CSS Flexbox düzeninde satır ve sütun olarak hizalanmış renkli kutular
Bu yazıda neler var?
  1. Flexbox Nasıl Çalışır?
  2. Ana ve Çapraz Eksen Nasıl Belirlenir?
  3. Temel Flexbox Özellikleri Nelerdir?
  4. Satır ve Sütun Düzeni Nasıl Kurulur?
  5. Flexbox Hangi Arayüzlerde Kullanılır?
  6. Flexbox ile CSS Grid Arasındaki Fark Nedir?
  7. Sık Yapılan Flexbox Hataları Nasıl Çözülür?
  8. Flexbox İçin Hangi Seçim Yapılmalı?

Flexbox, öğeleri tek bir ana eksende düzenleyen CSS yerleşim modelidir. display: flex; ve gap: 12px; ile doğrudan çocukları aynı satırda veya sütunda hizalayın. Flexbox nedir sorusunun net yanıtı şudur: Bir kapsayıcının yönünü, boşluklarını, hizasını ve alan paylaşımını yöneten CSS sistemidir.

Flexbox Nasıl Çalışır?

Flexbox kullanmak için kapsayıcıya display: flex; yazın. Bu öğe flex container adını alır. Kapsayıcının doğrudan içindeki öğeler ise flex item olarak davranır ve flex kurallarına göre yerleşir.

Varsayılan yön row değeridir. Bu değer, öğeleri yatay eksende yan yana dizer. Dikey bir akış kurmak için flex-direction: column; kullanın. İç içe bir div, dış kapsayıcının doğrudan çocuğu değilse dış kapsayıcının flex kurallarıyla düzenlenmez.

Örneğin üç öğeyi aynı kapsayıcıya yerleştirin: <div class="kutu">, ardından Bir, İki ve Üç içeriklerini ekleyin. .kutu { display: flex; } kuralı, bu üç doğrudan çocuğu aynı flex düzenine sokar.

Ana ve Çapraz Eksen Nasıl Belirlenir?

Flexbox iki eksenle çalışır. Ana eksen, öğelerin sıralandığı yöndür. Çapraz eksen, ana eksene dik yönde uzanır. flex-direction değeri değiştiğinde bu iki eksenin yönü de değişir.

YönAna eksenÇapraz eksenjustify-contentalign-items
rowYatayDikeyYatay dağıtımDikey hizalama
columnDikeyYatayDikey dağıtımYatay hizalama

justify-content ana ekseni, align-items ise çapraz ekseni yönetir. Bu nedenle row yönünde merkezleme için iki özellik farklı yönleri kontrol eder. Kuralın etkisini değerlendirirken önce flex-direction değerini kontrol edin.

İpucu: justify-content: center; row yönünde yatay, column yönünde dikey merkezleme yapar. Kapsayıcıda hizalama yönünde boş alan yoksa hareket görünmez.

Temel Flexbox Özellikleri Nelerdir?

Flexbox özelliklerini kapsayıcı ve öğe kuralları olarak ayırın. Kapsayıcı kuralları yönü, hizayı, aralığı ve satır davranışını belirler. Öğe kuralları ise belirli bir öğenin alan paylaşımını, temel boyutunu ve görsel sırasını yönetir.

  • display: flex; kapsayıcıyı flex container yapar.
  • flex-direction: ana yönü row veya column seçer.
  • justify-content: öğeleri ana eksende dağıtır.
  • align-items: öğeleri çapraz eksende hizalar.
  • gap: öğeler arasındaki boşluğu belirler.
  • flex-wrap: sığmayan öğeleri yeni satıra veya sütuna taşır.
  • align-content: birden fazla flex satırını çapraz eksende dağıtır.

Öğe düzeyinde flex-grow boş alan paylaşımını, flex-shrink daralma davranışını belirler. flex-basis büyüme veya küçülme öncesindeki temel boyutu tanımlar. align-self tek öğenin çapraz eksen hizasını değiştirir; order ise görsel sıralamayı düzenler.

Satır ve Sütun Düzeni Nasıl Kurulur?

Önce aynı gruba ait öğeleri tek kapsayıcı altında toplayın. Ardından kapsayıcıyı flex yapın ve ana yönü seçin. Menü, araç çubuğu veya kart başlığı gibi yatay yapılarda row; form, dikey menü ve düğme gruplarında column kullanın.

  1. Öğeleri aynı kapsayıcının doğrudan çocukları olarak yerleştirin.
  2. Kapsayıcıya display: flex; ekleyin.
  3. Yönü row veya column ile belirleyin.
  4. Ana eksen hizasını justify-content ile ayarlayın.
  5. Çapraz eksen hizasını align-items ile ayarlayın.
  6. Öğeler arasındaki boşluk için gap: 12px; yazın.

Üç öğeyi yatayda iki uca dağıtmak için justify-content: space-between; kullanın. Öğeleri dikey eksende ortalamak için align-items: center; ekleyin. Dar alanda taşmayı yönetmek için kapsayıcıya flex-wrap: wrap; yazın.

Flexbox Hangi Arayüzlerde Kullanılır?

Flexbox, bileşen içindeki öğeleri tek yönde hizalamanız gereken yapılara uygundur. Başlıkla düğmeyi aynı satıra yerleştirebilir, kart içeriğini dikey akıtabilir veya form alanlarını sütun halinde sıralayabilirsiniz. Her örnekte önce kapsayıcı yönünü, ardından hizalama kurallarını belirleyin.

Yatay gezinme menüsü, ortalanmış içerik ve dikey sıralı kontroller içeren arayüz taslağı
Flexbox, arayüz öğelerini yatay veya dikey yönde düzenler.
  • Gezinme menüsü: Bağlantıları row yönünde sıralayın ve aralarına 16px boşluk verin.
  • Kart başlığı: Başlıkla simgeyi iki uca yerleştirmek için space-between kullanın.
  • Buton grubu: Geniş alanda row, dar alanda column seçin.
  • İçerik ortalama: justify-content: center; ve align-items: center; kullanın.
  • Alt bilgi: İçerikleri column yönünde ve 8px aralıkla sıralayın.

Bir kapsayıcıya min-height: 240px; vererek dikey yönde kullanılabilir alan oluşturun. Ardından yön ve hizalama kurallarını ekleyin. Bu düzen, boş durum mesajlarını ve giriş bölümlerini kapsayıcı içinde ortalamak için kullanılabilir.

Flexbox ile CSS Grid Arasındaki Fark Nedir?

Flexbox tek ana eksen boyunca çalışır. CSS Grid ise satırları ve sütunları aynı düzen içinde yönetir. Bu ayrım, hangi aracın seçileceğini belirler. Bileşen içi hizalama için Flexbox, sayfanın birden fazla satır ve sütununu konumlandırmak için çoğunlukla Grid kullanın.

ÖlçütFlexboxCSS Grid
Düzen modeliTek boyutluİki boyutlu
Temel kullanımSatır veya sütun içi hizalamaSatır ve sütun tabanlı sayfa düzeni
Boşluk kontrolügap ile yapılırSatır ve sütun aralıklarıyla yapılır
Alan davranışıEsnek alan paylaşımıTanımlı ızgara alanları

Bir Grid alanının içindeki menüyü Flexbox ile düzenleyebilirsiniz. Sayfa iskeletinde Grid, bileşen içindeki hizalamada Flexbox kullanmak iki modeli aynı projede birleştirir. CSS'in temel yapısı için CSS nedir? rehberine bakın. HTML dosyası hazırlamak için HTML nasıl oluşturulur? rehberini kullanın.

Sık Yapılan Flexbox Hataları Nasıl Çözülür?

Flexbox sorunları çoğunlukla yanlış eksen varsayımından, belirsiz kapsayıcı ölçüsünden veya doğrudan çocuk ilişkisinin yanlış kurulmasından kaynaklanır. Geliştirici araçlarında kapsayıcıyı seçin. Tarayıcının flex işaretlerini kullanarak yönü, çocukları ve taşan alanı inceleyin.

HataBelirtiÇözüm
align-items ile yatay hizalama beklemekÖğe beklenmeyen yönde hareket ederflex-direction değerini kontrol edin
Her öğeye margin vermekİlk ve son kenarda fazla boşluk oluşurKapsayıcıda gap kullanın
flex-wrap eklememekÖğeler dar alanda taşarflex-wrap: wrap; yazın
İç içe öğeyi doğrudan çocuk sanmakFlex kuralı beklenen öğeyi etkilemezDoğru kapsayıcıya display: flex; ekleyin

space-between, kullanılabilir boşluğu öğelerin arasına dağıtır. Tek öğede iki uç arasında dağıtılacak ikinci bir öğe bulunmaz. Taşma sürerse kapsayıcı genişliğini, öğelerin minimum boyutunu ve flex-wrap değerini birlikte kontrol edin.

İpucu: Uzun metin veya görsel taşmasında ilgili flex item'a min-width: 0; yazın. Görselleri ayrıca max-width: 100%; ile kapsayıcı genişliği içinde tutun.

Flexbox İçin Hangi Seçim Yapılmalı?

Düzen tek eksende akıyorsa Flexbox ile başlayın. Öğeler aynı satırda duracaksa row, alt alta akacaksa column seçin. Ekran daraldığında öğelerin yeni satıra geçmesi gerekiyorsa flex-wrap kullanın. Aralıkları ayrı margin kuralları yerine kapsayıcıdaki gap ile yönetin.

  • Menü veya araç çubuğu: row ve align-items: center; kullanın.
  • Dikey form: column ve 8px veya 16px gap seçin.
  • Dar ekran: flex-wrap: wrap; ile öğeleri yeni satıra taşıyın.
  • Sayfa iskeleti: Satırları ve sütunları birlikte konumlandırıyorsanız CSS Grid seçin.

Uygulama sırasında önce yönü belirleyin. Sonra ana ekseni, çapraz ekseni ve boşluğu ayrı ayrı ayarlayın. Birden fazla kuralı aynı anda değiştirirseniz hangi özelliğin yerleşimi etkilediğini ayırt etmek zorlaşır. Kapsayıcı yüksekliği veya genişliği yeterli değilse merkezleme görünmeyebilir.

Sık sorulan sorular

Flexbox'ta flex kısaltması ne işe yarar?
<strong>flex</strong> kısaltması, <strong>flex-grow</strong>, <strong>flex-shrink</strong> ve <strong>flex-basis</strong> değerlerini tek bildirimde tanımlar. Bir öğeye <strong>flex: 1;</strong> verdiğinizde öğe, aynı kapsayıcıdaki kullanılabilir alanı paylaşır. Hassas boyut kontrolünde bu üç özelliği ayrı ayrı yazın.
Flexbox öğesi neden kapsayıcıdan taşar?
Uzun metin, geniş tablo veya büyük görsel bir flex item'ın küçülmesini engelleyebilir. İlgili öğeye <strong>min-width: 0;</strong> ekleyin. Görseli <strong>max-width: 100%;</strong> ile sınırlayın. Dar alanlarda kapsayıcıya <strong>flex-wrap: wrap;</strong> yazın ve metin taşmasını ayrıca yönetin.
Flexbox ile dikey ortalama neden çalışmaz?
Önce kapsayıcıda dikey yönde kullanılabilir alan oluşturun. <strong>row</strong> yönünde dikey ekseni <strong>align-items</strong> yönetir; <strong>column</strong> yönünde dikey ekseni <strong>justify-content</strong> yönetir. Kapsayıcı yüksekliği içeriğe eşitse hizalama için boş alan bulunmaz.
Flexbox'ta öğeler neden yeni satıra geçmez?
Flexbox varsayılan olarak öğeleri tek satırda tutar. Yeni satır için kapsayıcıya <strong>flex-wrap: wrap;</strong> ekleyin. Öğelerin toplam genişliği kapsayıcıyı aştığında tarayıcı uygun öğeleri sonraki satıra taşır. <em>column</em> yönünde aynı kural yeni sütunlar oluşturabilir.

Kaynaklar

  1. CSS flexible box layout - CSS | MDN
  2. Basic concepts of flexbox - CSS | MDN