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.

CSS Grid'de explicit grid oluştururken grid-template-columns'da fr, %, px birimlerini karışık kullanmak

✖ Kapat
Duyuru
✖ Kapat
Duyuru

asternix

Okur Üye
Üye
Katılım
14 Mart 2026
Mesajlar
71
Merhaba arkadaşlar, bugün CSS Grid ile uğraşırken başımı oldukça ağrıtan bir konuyu, birimleri karışık kullanmanın inceliklerini anlatacağım. Özellikle `grid-template-columns` tanımlarken `fr`, `%` ve `px` değerlerini aynı anda kullanmak istediğinizde, tarayıcının nasıl bir hesap yaptığını anlamak biraz kafa karıştırıcı olabiliyor. İlk denemelerimde grid öğelerimin beklediğim gibi yerleşmediğini görünce "Bu hesap kitap işi bana göre değil" demiştim ama aslında mantığını çözünce çok esnek ve güçlü bir araç olduğunu fark ettim.

🔥 Karşılaştığım Sorun ve Mantık

Diyelim ki sabit bir sidebar, esnek bir ana içerik alanı ve yüzde bazlı bir reklam alanından oluşan bir layout yapmak istiyorsunuz. İlk aklınıza gelen `grid-template-columns: 250px 1fr 20%;` gibi bir tanım olabilir. İşte tam burada sorun başlıyor. Tarayıcı, önce mutlak (`px`) ve yüzde (`%`) değerleri hesaplar, kalan tüm alanı ise `fr` birimine sahip olan öğelere dağıtır. Ancak yüzde değer, toplam container genişliğinin yüzdesi olarak hesaplanır. Eğer container genişliği bilinmiyorsa veya bu üç birim birlikte kullanıldığında beklentiniz ne olmalı, bunu anlamak önemli.

🧮 Birimleri Birlikte Kullanma Örneği

Aşağıdaki basit bir grid yapısı ve stilini inceleyelim. Amacımız, solda 250px sabit bir menü, ortada kalan boşluğun tamamını kaplayan bir içerik ve sağda da container'ın %20'si genişliğinde bir sidebar oluşturmak.

CSS:
.grid-container {
  display: grid;
  grid-template-columns: 250px 1fr 20%;
  gap: 1rem;
  height: 400px;
  border: 2px dashed #3498db;
  padding: 10px;
}

.grid-item {
  background-color: #2ecc71;
  border-radius: 5px;
  padding: 20px;
  color: white;
  font-weight: bold;
}

Bu kodu çalıştırdığınızda, tarayıcının şu sırayla hesaplama yaptığını göreceksiniz:
1. 250px'lik sabit değeri ayırır.
2. Container genişliğinin %20'sini hesaplar ve onu ayırır.
3. Kalan tüm boş alanı, `1fr` değerine sahip olan orta kolona verir.

Bu, genellikle istediğimiz davranıştır. Ancak dikkat etmeniz gereken nokta, eğer container çok küçükse (örneğin mobil görünüm), `250px + %20` değeri toplam container genişliğini aşabilir. Bu durumda grid öğeleri taşar veya tarayıcı yüzde değeri yeniden yorumlayarak garip sonuçlar verebilir.

🛡️ Daha Sağlam Bir Çözüm: minmax() ile Kombinasyon

Yukarıdaki potansiyel taşma sorununu engellemek ve daha responsif bir yapı kurmak için `minmax()` fonksiyonunu işin içine katmak benim en çok kullandığım yöntem. Özellikle `fr` birimi ile birlikte kullanıldığında mükemmel sonuç veriyor.

CSS:
.grid-container {
  display: grid;
  grid-template-columns: 250px minmax(200px, 1fr) minmax(150px, 20%);
  gap: 1rem;
}

/ Mobil için medya sorgusu /
@media (max-width: 768px) {
  .grid-container {
    / Küçük ekranlarda tek kolon yapalım /
    grid-template-columns: 1fr;
  }
}

Buradaki sihir şu: `minmax(200px, 1fr)` ifadesi, orta kolonun minimum 200px, maksimum ise `1fr` (yani kalan tüm boş alan) kadar olacağını söyler. Bu, içeriğin okunamayacak kadar küçülmesini engeller. Aynı mantık sağdaki sidebar için de geçerli. Bu yaklaşım, birim karışımının getirdiği esnekliği korurken, layout'unuzun çökmesini de önler.

💡 Pratik Kullanım Önerisi ve Sonuç

Benim tecrübeme göre, `grid-template-columns` veya `grid-template-rows` tanımlarken şu sıralamayı takip etmek işinizi kolaylaştırır:
1. Önce kesin bilinen sabit (`px`) değerleri yazın.
2. Ardından, container'a göre belirlenmesini istediğiniz yüzde (`%`) değerlerini ekleyin.
3. En son olarak, kalan tüm dinamik alanı bölüştürmek için kesir (`fr`) birimlerini kullanın.

İşte benim karma projelerde sıklıkla kullandığım, hem sabit hem de esnek alanlar içeren temiz bir örnek daha:

CSS:
.article-layout {
  display: grid;
  grid-template-columns: [COLOR=#E74C3C]minmax(120px, auto)[/COLOR] [COLOR=#E74C3C]3fr[/COLOR] [COLOR=#E74C3C]minmax(300px, 25%)[/COLOR];
  / 1- Sabit/Esnek Menü | 2- Esnek İçerik | 3- Sabit/Esnek Sidebar /
  gap: 20px;
}

Bu yapı, soldaki menüyü içeriğe göre genişletir veya daraltır, ana içeriğe kalan alanın büyük kısmını verir ve sağdaki sidebar'ı da hem minimum bir genişlikle korur hem de büyük ekranlarda container'ın %25'ini geçmemesini sağlar.

Siz CSS Grid'de birimleri karışık kullanırken ne gibi zorluklarla karşılaştınız? `fr` birimi sizin için vazgeçilmez mi, yoksa yüzde (%) kullanmaya mı daha çok alışkınsınız? Ya da bu tarz karma layout'lar için farklı bir yönteminiz var mı? Yorumlarda deneyimlerinizi paylaşın, beraber öğrenelim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri