İçeriğe geç

CSS Grid: İki Boyutlu Sayfa Düzenleri

Modern web tasarımının temel taşlarından biri olan CSS Grid, geliştiricilere iki boyutlu (hem satır hem de sütun tabanlı) karmaşık sayfa düzenleri oluşturma konusunda eşsiz bir esneklik ve kontrol sunar. Geçmişte float ve position gibi özelliklerle ya da tek boyutlu düzenler için tasarlanmış Flexbox ile çözülmeye çalışılan karmaşık hizalama sorunları, Grid sayesinde sezgisel ve güçlü bir yapıya kavuşmuştur. Bu sistem, bir HTML elemanını bir ızgara konteynerine dönüştürerek, içindeki öğeleri hassas bir şekilde konumlandırmamızı sağlar. Bu yazıda, CSS Grid’in temelini oluşturan display: grid özelliğinden başlayarak, grid-template-columns ve grid-template-rows ile ızgara yapısını nasıl tanımlayacağımızı, gap ile elemanlar arasına boşluklar eklemeyi ve grid-column ile grid-row kullanarak öğeleri ızgaranın belirli bölgelerine nasıl yerleştireceğimizi detaylı örneklerle inceleyeceğiz. Son olarak, bu bilgileri birleştirerek hem modern hem de tam duyarlı (responsive) web tasarımları ve dergi tarzı (magazine-style) estetik düzenler oluşturma tekniklerine odaklanacağız.

CSS Grid’in temelleri: Izgara konteynerini oluşturma

CSS Grid ile çalışmaya başlamanın ilk adımı, bir HTML elemanını ızgara konteyneri haline getirmektir. Bu, display: grid; özelliği kullanılarak yapılır. Bu bildirim, seçilen elemanın artık bir ızgara düzeni yöneteceğini ve doğrudan alt öğelerinin (direct children) ızgara elemanları (grid items) olarak davranacağını tarayıcıya bildirir. Ancak bu tek başına yeterli değildir; ızgaranın yapısını, yani kaç sütun ve satırdan oluşacağını tanımlamamız gerekir.

Bu noktada grid-template-columns ve grid-template-rows özellikleri devreye girer. Bu özellikler, ızgaranın dikey ve yatay izlerini (tracks) tanımlar.

  • grid-template-columns: Sütunların genişliğini ve sayısını belirler.
  • grid-template-rows: Satırların yüksekliğini ve sayısını belirler.

Değer olarak piksel (px), yüzde (%) veya esnek birim olan fr (fractional unit) kullanılabilir. fr birimi, mevcut alanın orantılı olarak paylaştırılmasını sağlar. Örneğin, grid-template-columns: 2fr 1fr; kodu, ilk sütunun ikinci sütundan iki kat daha geniş olacağı anlamına gelir.

Ayrıca, ızgara elemanları arasına boşluk eklemek için gap özelliği kullanılır. Bu özellik, row-gap ve column-gap özelliklerinin bir kısaltmasıdır ve hem satırlar hem de sütunlar arasına boşluk bırakır.

Örnek bir temel ızgara yapısı:


.container {
  display: grid;
  /* 3 sütun oluştur: ilki 100px, ikincisi esnek alanın 1/3'ü, üçüncüsü 2/3'ü */
  grid-template-columns: 100px 1fr 2fr;
  /* 2 satır oluştur: ilki 50px yüksekliğinde, ikincisi içeriğe göre otomatik ayarlanır */
  grid-template-rows: 50px auto;
  /* Satırlar ve sütunlar arasında 10px boşluk bırak */
  gap: 10px;
}

Izgara elemanlarını yerleştirme: grid-column ve grid-row

Izgara yapısını oluşturduktan sonraki en önemli adım, ızgara elemanlarını bu yapı içinde istediğimiz gibi konumlandırmaktır. CSS Grid, bunu ızgara çizgilerini (grid lines) referans alarak yapar. Örneğin, 3 sütunlu bir ızgaranın 4 dikey çizgisi vardır (başlangıçta 1, sütunlar arasında 2 ve sonda 1). Elemanları bu çizgiler arasına yerleştirmek için grid-column ve grid-row özelliklerini kullanırız.

Bu özellikler, grid-column-start, grid-column-end, grid-row-start ve grid-row-end özelliklerinin birer kısaltmasıdır. Kullanımı oldukça basittir: başlangıç çizgisi / bitiş çizgisi.

  • grid-column: 1 / 3; elemanın 1. dikey çizgiden başlayıp 3. dikey çizgiye kadar uzanmasını sağlar (ilk iki sütunu kaplar).
  • grid-row: 2 / 4; elemanın 2. yatay çizgiden başlayıp 4. yatay çizgiye kadar uzanmasını sağlar (ikinci ve üçüncü satırları kaplar).

Ayrıca, bitiş çizgisi yerine span anahtar kelimesi kullanılarak elemanın kaç adet iz (track) kaplayacağı belirtilebilir. Bu, özellikle karmaşık ve dinamik ızgaralarda hesap yapmayı kolaylaştırır. Örneğin, grid-column: 1 / span 2; ifadesi, “1. çizgiden başla ve 2 sütunluk yer kapla” anlamına gelir ve 1 / 3 ile aynı sonucu verir.

Örnek bir yerleştirme senaryosu:


.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-template-rows: 100px 200px 100px;
  gap: 15px;
}

.item-1 {
  /* 1. dikey çizgiden 4. (son) dikey çizgiye kadar uzan */
  grid-column: 1 / 4;
  /* Otomatik olarak ilk satıra yerleşir */
}

.item-2 {
  /* 1. dikey çizgiden başla ve 2 sütun kapla */
  grid-column: 1 / span 2;
  /* 2. yatay çizgiden başla ve 3. yatay çizgiye kadar uzan */
  grid-row: 2 / 3;
}

.item-3 {
  /* Otomatik olarak boş olan ilk hücreye, yani 3. sütun 2. satıra yerleşir */
}

Esnek ve duyarlı ızgaralar oluşturma

CSS Grid’in en güçlü yanlarından biri, medya sorguları (media queries) kullanmadan dahi son derece esnek ve duyarlı düzenler oluşturma imkanı tanımasıdır. Bu, repeat(), minmax(), auto-fit ve auto-fill gibi gelişmiş fonksiyon ve anahtar kelimelerle mümkün olur.

minmax(min, max) fonksiyonu, bir ızgara izinin (sütun veya satır) minimum ve maksimum boyutlarını belirlemenizi sağlar. Bu, elemanların belirli bir boyuttan küçülmesini engellerken, büyümeleri için esneklik tanır.

repeat() fonksiyonu, tekrar eden ızgara izlerini daha temiz bir şekilde yazmak için kullanılır. Ancak asıl gücü, auto-fit veya auto-fill anahtar kelimeleriyle birleştiğinde ortaya çıkar. Bu anahtar kelimeler, konteyner genişliğine bağlı olarak sığabilecek kadar çok sütun oluşturulmasını sağlar.

  • auto-fit: Konteynerde yeterli alan varsa yeni sütunlar oluşturur. Eğer sütunlar konteynere sığdıktan sonra boş alan kalırsa, mevcut sütunları bu alanı dolduracak şekilde genişletir.
  • auto-fill: auto-fit gibidir, ancak boş alan kalsa bile sütunları genişletmez; bunun yerine boş izler oluşturur. Genellikle auto-fit daha çok tercih edilir.

Bu üç aracı birleştirerek, ekran boyutuna göre sütun sayısını otomatik olarak ayarlayan bir galeri düzeni oluşturabiliriz:


.gallery {
  display: grid;
  /*
    Konteynere sığabildiği kadar çok sütun oluştur.
    Her sütun en az 250px genişliğinde olsun.
    Eğer daha fazla alan varsa, sütunlar eşit şekilde genişleyerek alanı doldursun (1fr).
  */
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}

Yukarıdaki kod, hiçbir medya sorgusuna ihtiyaç duymadan, mobil cihazlarda tek sütunlu, tabletlerde iki veya üç sütunlu ve geniş ekranlarda daha fazla sütunlu bir düzeni otomatik olarak oluşturur.

İleri düzey teknikler: Dergi tarzı düzenler

CSS Grid, sadece simetrik ve tekrarlayan kutu düzenleri için değil, aynı zamanda asimetrik, sanatsal ve hiyerarşik öneme sahip içeriklerin sunulduğu dergi tarzı (magazine-style) tasarımlar için de mükemmeldir. Bu tür düzenler, farklı boyutlardaki elemanların belirli bir kompozisyon içinde bir araya getirilmesiyle oluşturulur ve grid-column ile grid-row özelliklerinin tam potansiyelini ortaya koyar.

Örneğin, bir ana başlık, büyük bir ana görsel, bir metin bloğu ve birkaç küçük tamamlayıcı elemandan oluşan bir sayfa düşünelim. Bu elemanları, tanımladığımız bir ızgara üzerinde stratejik olarak yerleştirerek görsel bir hiyerarşi kurabiliriz.

Bu senaryoda, önce genel ızgara yapısını tasarlarız. Ardından her bir elemanı, ızgara çizgilerini kullanarak istediğimiz konuma yerleştirir ve boyutlandırırız.

Örnek bir dergi düzeni:


/* HTML Yapısı */
<div class="magazine-layout">
  <header class="main-header">Başlık</header>
  <figure class="featured-image">Ana Görsel</figure>
  <article class="main-content">Ana İçerik</article>
  <aside class="sidebar">Yan Menü</aside>
</div>

/* CSS Kodu */
.magazine-layout {
  display: grid;
  grid-template-columns: repeat(4, 1fr); /* 4 esnek sütun */
  grid-template-rows: auto 300px auto; /* 3 satır */
  gap: 20px;
  width: 90%;
  margin: auto;
}

.main-header {
  /* 1. çizgiden başla ve son çizgiye kadar tüm sütunları kapla */
  grid-column: 1 / -1; /* -1 son çizgi anlamına gelir */
  grid-row: 1 / 2;
}

.featured-image {
  /* 1. çizgiden başla ve 3 sütun kapla */
  grid-column: 1 / span 3;
  grid-row: 2 / 3;
}

.main-content {
  grid-column: 1 / span 3;
  grid-row: 3 / 4;
}

.sidebar {
  /* 4. sütunu kapla ve 2. satırdan başla 3. satırın sonuna kadar uzan */
  grid-column: 4 / 5;
  grid-row: 2 / span 2;
}

Bu örnek, CSS Grid’in elemanları sadece yan yana veya alt alta dizmekle kalmayıp, onları iki boyutlu bir tuval üzerinde sanatsal bir şekilde düzenleme yeteneğini göstermektedir. Bu sayede hem işlevsel hem de estetik açıdan zengin web sayfaları oluşturmak mümkün hale gelir.

Sonuç olarak, CSS Grid modern web geliştirmenin vazgeçilmez bir parçasıdır ve sunduğu iki boyutlu düzen sistemiyle geliştiricilere daha önce benzeri görülmemiş bir kontrol sağlar. Bu yazıda ele aldığımız gibi, display: grid ile bir ızgara konteyneri oluşturarak işe başladık. Ardından grid-template-columns ve grid-template-rows ile ızgaramızın temel yapısını tanımladık, gap özelliğiyle elemanlar arasına estetik boşluklar ekledik. Öğeleri ızgara üzerinde serbestçe konumlandırmamızı sağlayan grid-column ve grid-row özelliklerinin gücünü gördük. Daha da önemlisi, repeat(auto-fit, minmax()) gibi gelişmiş tekniklerle medya sorgularına ihtiyaç duymadan tam duyarlı düzenler oluşturmanın ne kadar kolay olduğunu keşfettik. Son olarak, tüm bu bilgileri birleştirerek dergi tarzı karmaşık ve asimetrik tasarımlar yaratma yeteneğini inceledik. CSS Grid, sadece bir hizalama aracı değil, aynı zamanda yaratıcı ve işlevsel web tasarımları için güçlü bir temeldir.

Resim Sahibi: picjumbo.com
https://www.pexels.com/@picjumbo-com-55570

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir