CSS Artık Eskisi Kadar Zor Değil
Yıllarca CSS layout'ları float ve position ile yapıldı; bu da sayısız hack ve workaround'a yol açtı. Bugün ise Flexbox, CSS Grid ve yeni Container Queries sayesinde karmaşık layoutlar artık hem daha kolay hem de çok daha anlaşılır şekilde yazılıyor.
Flexbox: Tek Boyutlu Layout
Flexbox, bir satır veya sütun boyunca öğeleri düzenlemek için mükemmeldir. Navbar, kart satırları, buton grupları gibi tek eksenli düzenler için ideal seçimdir.
.navbar {
display: flex;
align-items: center; /* Dikey ortalama */
justify-content: space-between; /* Yatayda eşit dağılım */
gap: 16px; /* Öğeler arası boşluk */
}
/* Esnek öğeler */
.nav-logo { flex-shrink: 0; } /* Küçülmesin */
.nav-links { flex: 1; } /* Kalan alanı doldursun */
.nav-actions { flex-shrink: 0; } /* Küçülmesin */
CSS Grid: İki Boyutlu Layout
Grid, hem satır hem de sütun kontrolü gerektiren karmaşık sayfa düzenleri için kullanılır. Blog kartları, dashboard layout'ları, resim galerileri için mükemmeldir.
/* Otomatik dolduran, duyarlı (responsive) kart grid'i */
.kart-konteyner {
display: grid;
/* En az 280px genişlikte, kalan alanı eşit bölen sütunlar */
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 24px;
}
/* Tam sayfa layout örneği */
.sayfa-duzen {
display: grid;
grid-template-areas:
"header header"
"sidebar icerik"
"footer footer";
grid-template-columns: 260px 1fr;
grid-template-rows: auto 1fr auto;
min-height: 100vh;
}
.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.icerik { grid-area: icerik; }
.footer { grid-area: footer; }
Container Queries: Bileşen Bazlı Duyarlılık
Medya sorguları (media queries) sayfanın genişliğine göre stil uygular. Container Queries ise bir bileşenin kendi konteynırının genişliğine göre stil uygulamasına izin verir. Bu devrim niteliğinde bir özelliktir!
/* 1. Konteynırı tanımla */
.kart-wrapper {
container-type: inline-size;
container-name: kart;
}
/* 2. Konteynır genişliğine göre stil yaz */
@container kart (min-width: 400px) {
.kart {
display: flex; /* Geniş konteynırda yatay yerleşim */
flex-direction: row;
}
.kart-resim {
width: 200px;
flex-shrink: 0;
}
}
/* Konteynır dar olduğunda */
@container kart (max-width: 399px) {
.kart {
display: block; /* Dar konteynırda dikey yerleşim */
}
}
Ne Zaman Hangisini Kullanmalı?
- Flexbox: Navigasyon barları, buton grupları, kart içi düzenler — tek bir eksen.
- CSS Grid: Sayfa genel layout'u, çok sütunlu galeriler, dashboard'lar — iki eksen.
- Container Queries: Yeniden kullanılabilir bileşenler; bileşenin konumuna göre kendi layoutunu ayarlaması gerektiğinde.
Flexbox ve Grid'i birbirine rakip olarak değil, tamamlayıcı araçlar olarak düşünün. Çoğu gerçek proje her ikisini de bir arada kullanır: Grid ile sayfa iskeletini, Flexbox ile bileşen içlerini düzenlersiniz.
