Neler yeni
XenForo Bannerlar

Foruma hoş geldin, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Web geliştirme CSS Grid Sistemi Nedir? Uygulamalı Kod Örnekleriyle Anlatım

Fatih Bulut

Süper Üye
Katılım
6 Kas 2021
Mesajlar
3,010
Tepkime puanı
4,532
Puanları
113
Yaş
31
Konum
Türkiye
Dc
fatihbulut

CSS Grid Sistemi: Kapsamlı Rehber ve Uygulamalı Örnekler​

CSS Grid, modern web geliştirmede en güçlü düzen (layout) araçlarından biridir. Bu kapsamlı rehberde, CSS Grid'in temel kavramlarını, özelliklerini ve gerçek dünya uygulamalarını detaylı kod örnekleriyle inceleyeceğiz.

1. CSS Grid'e Giriş​

CSS Grid Layout (Izgara Düzeni), iki boyutlu bir düzen sistemi sağlar. Flexbox'ın aksine hem satırlar hem de sütunlar üzerinde tam kontrol imkanı sunar.

Grid'in Temel Yapısı​

HTML:
<div class="grid-container">
  <div class="grid-item">1</div>
  <div class="grid-item">2</div>
  <div class="grid-item">3</div>
  <div class="grid-item">4</div>
  <div class="grid-item">5</div>
  <div class="grid-item">6</div>
</div>
CSS:
.grid-container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
  grid-gap: 20px;
}

.grid-item {
  background-color: #4a6fa5;
  color: white;
  padding: 20px;
  text-align: center;
}
Anahtar Kavramlar:
  • Grid Container: display: grid tanımlanan element
  • Grid Item: Grid container'ın direkt çocukları
  • Grid Line: Izgaranın bölümlerini ayıran çizgiler
  • Grid Track: İki grid line arasındaki boşluk (satır veya sütun)
  • Grid Cell: Bir satır ve bir sütunun kesiştiği alan
  • Grid Area: Bir veya daha fazla grid cell'den oluşan alan

2. Grid Özellikleri ve Kullanımları​

Grid Container Özellikleri​

grid-template-columns ve grid-template-rows​

CSS:
.grid-container {
  display: grid;
  grid-template-columns: 200px 1fr 2fr;
  grid-template-rows: 100px auto 150px;
}
  • fr (fraction) birimi: Kullanılabilir boş alanın oransal dağılımı
  • auto: İçerik boyutuna göre ayarlanır
  • minmax(): Minimum ve maksimum boyut belirleme
CSS:
.grid-container {
  grid-template-columns: minmax(100px, 250px) 1fr 2fr;
}

grid-template-areas​


CSS:
.grid-container {
  grid-template-areas:
    "header header header"
    "sidebar main main"
    "footer footer footer";
}

.header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main { grid-area: main; }
.footer { grid-area: footer; }

gap (eski adıyla grid-gap)​

CSS:
.grid-container {
  gap: 20px; /* Hem row hem column gap */
  row-gap: 15px;
  column-gap: 30px;
}

justify-items, align-items, place-items​


CSS:
.grid-container {
  justify-items: start; /* start | end | center | stretch (default) */
  align-items: center;  /* start | end | center | stretch (default) */
  place-items: center stretch; /* align-items justify-items */
}

justify-content, align-content, place-content​


CSS:
.grid-container {
  justify-content: space-between; /* start | end | center | stretch | space-around | space-between | space-evenly */
  align-content: center;
  place-content: center space-between;
}

Grid Item Özellikleri​

grid-column ve grid-row​

CSS:
.grid-item {
  grid-column: 1 / 3; /* Başlangıç ve bitiş grid line'ları */
  grid-row: 1 / span 2; /* span ile kaç track kaplayacağını belirtebiliriz */
}
Kısayol özellikleri:
  • grid-column-start
  • grid-column-end
  • grid-row-start
  • grid-row-end

grid-area​

CSS:
.grid-item {
  grid-area: 1 / 1 / 3 / 3; /* row-start / column-start / row-end / column-end */
}

justify-self, align-self, place-self​


CSS:
.grid-item {
  justify-self: center;
  align-self: end;
  place-self: center end;
}

3. Pratik Grid Örnekleri​

Örnek 1: Responsive Kart Düzen​

HTML:
<div class="card-grid">
  <div class="card">Kart 1</div>
  <div class="card">Kart 2</div>
  <div class="card">Kart 3</div>
  <div class="card">Kart 4</div>
  <div class="card">Kart 5</div>
  <div class="card">Kart 6</div>
</div>
CSS:
.card-grid {
  display: grid;
  gap: 20px;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  padding: 20px;
}

.card {
  background: white;
  border-radius: 8px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.1);
  padding: 20px;
  min-height: 150px;
}
Açıklama:
  • repeat(auto-fill, minmax(250px, 1fr)): Minimum 250px genişliğinde, mümkün olduğunca çok sütun oluşturur
  • Ekran genişliği değiştikçe otomatik olarak yeniden düzenlenir

Örnek 2: Magazine-Style Layout​

HTML:
<div class="magazine-layout">
  <div class="featured">Öne Çıkan</div>
  <div class="secondary">İkincil</div>
  <div class="tertiary">Üçüncül 1</div>
  <div class="tertiary">Üçüncül 2</div>
  <div class="tertiary">Üçüncül 3</div>
</div>
CSS:
.magazine-layout {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: 300px 150px;
  gap: 20px;
}

.featured {
  grid-column: 1 / span 2;
  grid-row: 1 / span 2;
  background-color: #4a6fa5;
}

.secondary {
  grid-column: 3 / span 2;
  background-color: #3a5a8f;
}

.tertiary {
  background-color: #2c4a7f;
}

/* Tüm grid öğeleri için ortak stiller */
.magazine-layout > div {
  color: white;
  padding: 20px;
  border-radius: 8px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 24px;
  font-weight: bold;
}

Örnek 3: Tam Sayfa Düzeni (Holy Grail Layout)​

HTML:
<div class="holy-grail">
  <header>Header</header>
  <nav>Navigation</nav>
  <main>Main Content</main>
  <aside>Sidebar</aside>
  <footer>Footer</footer>
</div>
CSS:
.holy-grail {
  display: grid;
  grid-template:
    "header header header" 80px
    "nav main aside" 1fr
    "footer footer footer" 80px
    / 200px 1fr 200px;
  min-height: 100vh;
  gap: 1rem;
}

header { grid-area: header; background: #4a6fa5; }
nav { grid-area: nav; background: #3a5a8f; }
main { grid-area: main; background: #2c4a7f; }
aside { grid-area: aside; background: #1c3a6f; }
footer { grid-area: footer; background: #0c2a5f; }

/* Tüm öğeler için ortak stiller */
.holy-grail > * {
  color: white;
  padding: 1rem;
  border-radius: 4px;
  display: flex;
  align-items: center;
  justify-content: center;
  font-weight: bold;
}

@media (max-width: 768px) {
  .holy-grail {
    grid-template:
      "header" 80px
      "nav" auto
      "main" 1fr
      "aside" auto
      "footer" 80px
      / 1fr;
  }
}

4. Gelişmiş Grid Teknikleri​

Örtüşen (Overlapping) Öğeler​

HTML:
<div class="overlap-grid">
  <div class="image"></div>
  <div class="content"></div>
</div>
CSS:
.overlap-grid {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: 400px;
}

.image {
  grid-column: 1;
  grid-row: 1;
  background: url('resim.jpg') center/cover;
  z-index: 1;
}

.content {
  grid-column: 1;
  grid-row: 1;
  background: rgba(74, 111, 165, 0.8);
  color: white;
  z-index: 2;
  align-self: end;
  padding: 2rem;
  margin: 2rem;
}

Auto Placement ve Dense Packing​


CSS:
.grid-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-auto-rows: 100px;
  gap: 10px;
  grid-auto-flow: dense; /* Boşlukları doldurmak için */
}

.grid-item:nth-child(3n) {
  grid-column: span 2;
  grid-row: span 2;
  background-color: #3a5a8f;
}

Masonry Layout (CSS Grid Level 3)​


CSS:
.grid-container {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 20px;
  grid-template-rows: masonry; /* Deneysel özellik */
}

5. Grid ve Flexbox Birlikte Kullanımı​


HTML:
<div class="combined-layout">
  <header>Header</header>
  <div class="content">
    <aside>Sidebar</aside>
    <main>
      <div class="card">Card 1</div>
      <div class="card">Card 2</div>
      <div class="card">Card 3</div>
    </main>
  </div>
  <footer>Footer</footer>
</div>
CSS:
.combined-layout {
  display: grid;
  grid-template-rows: auto 1fr auto;
  min-height: 100vh;
}

.content {
  display: grid;
  grid-template-columns: 250px 1fr;
  gap: 20px;
}

main {
  display: flex;
  flex-wrap: wrap;
  gap: 15px;
  align-content: flex-start;
}

.card {
  flex: 1 1 300px;
  background: #f0f0f0;
  padding: 20px;
  border-radius: 8px;
}

/* Diğer stiller */
header, footer, aside {
  padding: 20px;
  background: #4a6fa5;
  color: white;
}

6. Grid ile Responsive Tasarım​

repeat() ve auto-fit/auto-fill​

CSS:
.responsive-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 20px;
}
  • auto-fit: Mümkün olduğunca çok sütun oluşturur, boş sütunları sıkıştırır
  • auto-fill: Mümkün olduğunca çok sütun oluşturur, boş sütunları boş bırakır

Media Query'lerle Grid Yeniden Düzenleme​

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

@media (min-width: 600px) {
  .grid-container {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 900px) {
  .grid-container {
    grid-template-columns: repeat(3, 1fr);
  }
}

@media (min-width: 1200px) {
  .grid-container {
    grid-template-columns: repeat(4, 1fr);
  }
}

Grid ve clamp() Kullanımı​

CSS:
.grid-container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(clamp(200px, 25vw, 300px), 1fr));
  gap: 20px;
}

7. Gerçek Dünya Uygulaması: E-ticaret Ürün Listesi​

HTML:
<div class="product-grid">
  <div class="product-filters">Filtreler</div>
  <div class="product-sort">Sıralama</div>
  <div class="product-list">
    <div class="product-card">Ürün 1</div>
    <div class="product-card">Ürün 2</div>
    <!-- Daha fazla ürün kartı -->
  </div>
  <div class="product-pagination">Sayfalar</div>
</div>
CSS:
.product-grid {
  display: grid;
  grid-template:
    "filters sort" auto
    "filters products" 1fr
    "pagination pagination" auto
    / 250px 1fr;
  gap: 30px;
  max-width: 1200px;
  margin: 0 auto;
  padding: 20px;
}

.product-filters {
  grid-area: filters;
  background: #f8f9fa;
  padding: 20px;
  border-radius: 8px;
}

.product-sort {
  grid-area: sort;
  display: flex;
  justify-content: flex-end;
  align-items: center;
}

.product-list {
  grid-area: products;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  gap: 20px;
}

.product-card {
  background: white;
  border-radius: 8px;
  box-shadow: 0 2px 10px rgba(0,0,0,0.05);
  padding: 20px;
  display: flex;
  flex-direction: column;
}

.product-pagination {
  grid-area: pagination;
  display: flex;
  justify-content: center;
  padding: 20px 0;
}

@media (max-width: 768px) {
  .product-grid {
    grid-template:
      "sort" auto
      "filters" auto
      "products" 1fr
      "pagination" auto
      / 1fr;
  }
 
  .product-filters {
    position: sticky;
    top: 0;
    z-index: 100;
  }
}

Sonuç​

CSS Grid, modern web geliştirmede devrim yaratmış bir teknolojidir. Bu rehberde gördüğümüz gibi:
  1. İki boyutlu düzen için mükemmel bir çözüm sunar
  2. Karmaşık tasarımları kolayca oluşturmayı sağlar
  3. Responsive tasarım için güçlü araçlar içerir
  4. Flexbox ile birlikte kullanıldığında daha da güçlü hale gelir
  5. Kod miktarını azaltır ve bakımı kolaylaştırır
CSS Grid'i etkili kullanmak için:
  • fr birimini ve minmax() fonksiyonunu iyi anlayın
  • grid-template-areas ile görsel düzen oluşturmayı deneyin
  • auto-fit ve auto-fill arasındaki farkı öğrenin
  • Tarayıcı desteğini her zaman kontrol edin (caniuse.com)
  • Pratik yapmak için farklı layout örnekleri oluşturun
CSS Grid, web tasarımında yeni bir çağ açmıştır ve doğru şekilde kullanıldığında hem geliştirici deneyimini hem de son kullanıcı deneyimini önemli ölçüde iyileştirir.
 

Forumdan daha fazla yararlanmak için giriş yapın yada üye olun!

Forumdan daha fazla yararlanmak için giriş yapın veya kayıt olun!

Kayıt ol

Forumda bir hesap oluşturmak tamamen ücretsizdir.

Şimdi kayıt ol
Giriş yap

Eğer bir hesabınız var ise lütfen giriş yapın

Giriş yap

Tema düzenleyici

Tema özelletirmeleri

Grafik arka planlar

Granit arka planlar