Guide 6 Jul 2026 9 dk okuma

CSS Flexbox vs Grid: Hangi Yerleşim Sistemi Kullanılmalı?

Hem Flexbox hem de CSS Grid benzer sonuçlar üretebilir, bu yüzden geliştiriciler zaman zaman yanlış olanı seçebilir. Fark tek boyutlu ile iki boyutlu arasındaki farka dayanır ve hangisiyle uğraştığınızı bilmek tercihi netleştirir.

CSS Flexbox vs Grid: layout comparison guide

Tek Cümle Kuralı

Öğeleri tek bir yönde (bir satır veya sütun) dizdiğinizde Flexbox kullanın. Yerleşimi aynı anda iki yönde (satırlar ve sütunlar eşzamanlı olarak) kontrol etmeniz gerektiğinde CSS Grid kullanın.

Kararın özü tam olarak budur. Geri kalan her şey, bu kuralın pratikte neden işe yaradığını açıklayan detaylardır.

Flexbox'ın Gerçekten İyi Olduğu Konular

Flexbox, tek bir eksen boyunca alanı dağıtmak için tasarlanmıştır. Onun en can alıcı özelliği, her biri için kesin boyutlar belirtmenize gerek kalmadan öğelerin doğal olarak büyümesi, küçülmesi ve sarmalanmasıdır.

Flexbox'ın doğru seçim olduğu durumlar şunlardır:

  • Navigasyon çubukları — belirli öğeleri sağa itmek istediğiniz (margin-left: auto) veya eşit aralıklı dizmek istediğiniz (justify-content: space-between) bir bağlantı satırı
  • Her kartın içerik uzunluğuna bakılmaksızın eşit yüksekliğe sahip olduğu Kart satırları (align-items: stretch bunu otomatik olarak halleder)
  • Bir konteyner içinde bir öğeyi yatay ve dikey olarak ortalamak — üç satırlık CSS: display: flex; justify-content: center; align-items: center
  • Buton grupları, ikon + etiket kombinasyonları ve çocuk öğelerin belirli bir boşlukla yan yana durması gereken herhangi bir bileşen
  • Yer kalmadığında öğelerin bir sonraki satıra sarmalanmasını istediğiniz Sarma listeler (Wrapping lists) (flex-wrap: wrap)
Flexbox ile Navigasyon Çubuğu:
.navbar {
    display: flex;
    align-items: center;
    gap: 1rem;
}
.navbar .logo { margin-right: auto; }
/* logo solda kalır, bağlantılar sağda kalır */

CSS Grid'in Gerçekten İyi Olduğu Konular

Grid, iki boyutlu yerleşimler için tasarlanmıştır — hem satırları hem de sütunları tanımlarsınız; öğeleri hücrelere tam olarak yerleştirebilir, birden fazla satırı veya sütunu kapsayabilir ve her iki yönde boşluklar oluşturabilirsiniz.

Grid'in doğru seçim olduğu durumlar şunlardır:

  • Sayfa yerleşimleri — başlık, yan menü, ana içerik ve alt kısmın hepsinin birbirine göre konumlandırılması
  • Farklı öğelerin farklı miktarlarda alan kapladığı Dergi veya dashboard yerleşimleri
  • Görüntü boyutından bağımsız olarak tutarlı bir ızgara yapısına sahip Resim galerileri
  • Etiketlerin ve giriş alanlarının hem yatay hem de dikey olarak hizalanması gereken Form yerleşimleri
  • Aynı anda hem satırları HEM DE sütunları düşündüğünüz herhangi bir yerleşim
Grid ile İki Sütunlu Sayfa Yerleşimi:
.page {
    display: grid;
    grid-template-columns: 250px 1fr;
    grid-template-rows: auto 1fr auto;
    grid-template-areas:
        "header header"
        "sidebar main"
        "footer footer";
    min-height: 100dvh;
}

Yan Yana Örnek: Bir Kart Izgarası

Karmaşanın yaşandığı yer burasıdır. Her iki sistem de bir kart satırı oluşturabilir:

Flexbox ile:
.card-row {
    display: flex;
    gap: 1rem;
    flex-wrap: wrap;
}
.card { flex: 1 1 280px; }
Grid ile:
.card-row {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: 1rem;
}

Her ikisi de çalışır. Grid versiyonu burada genellikle tercih edilir çünkü minmax ile auto-fill kullanımı size daha öngörülebilir bir sütun davranışı sağlar — her sütun tam olarak aynı genişliktedir ve ızgara düzenli bir şekilde yeniden şekillenir. Flexbox versiyonu ise kartların değişken genişliklere sahip olabildiği ve onların mevcut alanı daha akıcı kullanmasını istediğiniz durumlarda daha iyidir.

Hizalama Farkı

Flexbox'ta, öğeleri ana eksen (seçtiğiniz yön) ve çapraz eksen (ona dik olan) boyunca hizalarsınız. Görünmez bir satır ve sütun ızgarası içinde bir hücrenin konumunu bağımsız olarak kontrol edemezsiniz.

Grid'de ise her öğe, hem satır hem de sütun konumuna sahip bir hücrede yaşar. Bir öğeyi açıkça 2. satır, 3. sütuna yerleştirebilir veya tarayıcının onu otomatik yerleştirmesine izin verebilirsiniz. Flexbox'ın hücre kavramı yoktur — öğeler sadece belirttiğiniz yönde akar.

Hızlı test: Eğer kendinizi her şeyi paylaşılan görünmez bir hatta hem yatay hem de dikey olarak hizalamak isterken yakalarsanız — Grid kullanın. Sadece öğeleri tek bir eksen boyunca itiyorsanız — Flexbox kullanın.

Yaygın Hatalar

Basit merkezleme için Grid kullanmak: display: flex; align-items: center; justify-content: center, tek bir öğe için bir ızgara kurmaktan daha hızlıdır. Flexbox, tek eksenli görevlerde kazanır.

Tam sayfa yerleşimleri için Flexbox kullanmak: Birbirine konumsel olarak bağlı olması gereken iki'den fazla bileşene sahip olduğunuzda (başlık + yan menü + içerik + alt kısım), Flexbox'ın ikinci ekseninin eksikliği bir soruna dönüşür. Grid bunu adlandırılmış alanlarla (named areas) halleder.

Grid satırlarının yerine Flexbox sütununu kullanmak: <flex-direction: column> öğelerin dikey olarak üst üste binmesini sağlar, ancak içeriği birden fazla sütunda eşzamanlı olarak hizalama yeteneğini kaybedersiniz. Sütunlar hakkında düşünüyorsanız Grid'e geçin.

İkisini Birlikte Kullanmak

Grid ve Flexbox birbirini dışlayan yapılar değildir. En yaygın gerçek dünya modeli sayfa düzeyi yerleşim için Grid, her bölümün içinde Flexbox kullanımıdır:

  • Grid; yan menüyü, başlığı ve ana içerik alanını konumlandırır
  • Navigasyonun içinde (başlık alanında bulunan), Flexbox logo + bağlantılar + CTA butonu satırını halleder
  • Ana içerik alanının içinde, bir kart ızgarası sütun yapısı için Grid kullanır
  • Her kartın içinde, Flexbox ikon + metin + buton yerleşimini halleder

Bu kompozisyon deseni — yapı için Grid, bileşenler için Flexbox — çoğu modern CSS framework'ünün (Tailwind, Bootstrap) içsel çalışma prensibidir.

Hızlı Özellik Referansı

İstediğiniz şeyFlexboxGrid
Yerleşim yönünü ayarlaflex-directiongrid-template-columns/rows
Öğeler arası boşlukgap veya justify-contentgap
Çapraz eksende hizalaalign-itemsalign-items
Bir öğeyi spesifik olarak yerleştirDoğrudan mümkün değilgrid-column / grid-row
Öğeleri eşit yükseklikte yapalign-items: stretchVarsayılan davranış
Media queries olmadan duyarlı (responsive) yapıflex-wrap: wrap + <style="font-family: monospace;">flex-basisauto-fill + <style="font-family: monospace;">minmax()
Flexbox Yerleşimlerini Görsel Olarak Oluşturun

Flex konteynerleri oluşturmak, hizalamayı ayarlamak ve üretilen CSS'i saniyeler içinde kopyalamak için görsel CSS Flexbox Generator'ımızı kullanın.