Web Geliştirmede Modern CSS: Container Queries ile Gerçekten Duyarlı Bileşenler Oluşturma 🎯

codrix

Üye
Katılım
14 Mart 2026
Mesajlar
1
Web Geliştirmede Modern CSS: Container Queries ile Gerçekten Duyarlı Bileşenler Oluşturma 🎯

Selam dostlar! Uzun zamandır forumda takılıyorum ve bugün sizlerle, responsive tasarım dünyasında adeta bir devrim yaratan, benim de yeni projelerimde sıkça kullanmaya başladığım harika bir CSS özelliğinden bahsetmek istiyorum: Container Queries.

Yıllardır Media Queries ile ekran genişliğine göre tasarım yapıyorduk, değil mi? "Bu bileşen 768px'de şöyle, 1024px'de böyle olsun" diye. Ancak bu yaklaşım, modern bileşen tabanlı (component-based) geliştirmede bazen yetersiz kalıyordu. Çünkü bir kart bileşeninin, içine yerleştirildiği dar bir sidebar'da mı yoksa geniş bir ana alanda mı olduğunu bilmiyorduk. İşte Container Queries tam da bu sorunu çözüyor. Bileşenin stilini, kendi ebeveyn konteynerinin boyutuna göre belirlemenize olanak tanıyor. Bu, inanılmaz bir esneklik ve yeniden kullanılabilirlik sağlıyor! 🚀

Container Queries'e Neden İhtiyaç Duyarız?

Bir senaryo düşünelim:
  • Bir ürün kartı bileşeni tasarladınız. Masaüstünde yan yana 4 tane, tablette 2 tane, mobilde 1 tane sıralanıyor.
  • Ama aynı kartı, ana sayfadaki büyük grid'de de, sepetteki küçük özet alanında da kullanmak istiyorsunuz.
  • Klasik Media Queries ile, sepetteki kartın çok küçük bir alana sığması gerektiğinde, tüm mobil kullanıcılar için aynı küçük stili uygulamak zorunda kalırdınız. Bu da ana sayfadaki mobil kullanıcılar için kötü bir deneyim demekti.
Container Queries ile, bileşen "Beni saran div şu anda 300px'den dar, o halde kompakt moda geçeyim" diyebiliyor. Harika değil mi?

Nasıl Çalışır? Temel Adımlar

Kullanımı oldukça basit. Hemen bir örnekle gösterelim:

  • 1. Adım: Konteyneri Tanımlama
    Öncelikle, bileşenimizin sarmalayıcısını bir "container" olarak tanımlıyoruz.
    Kod:
    .card-container {
      container-type: inline-size; /* Yatay boyut (width) değişikliklerini izler */
      /* container-type: size;  -> Hem width hem height değişikliklerini izler */
    }
  • 2. Adım: Container Query Yazma
    Ardından, bu konteynerin genişliğine bağlı stillerimizi yazıyoruz. Sözdizimi Media Queries'e çok benzer, ama `@container` kullanırız.
    Kod:
    /* Varsayılan kart stili (dar alanlar için) */
    .product-card {
      padding: 1rem;
      display: block;
    }
    .product-card img {
      width: 100%;
    }
    .product-card .title {
      font-size: 1rem;
    }
    
    /* Konteyner 400px'den geniş olduğunda */
    @container (min-width: 400px) {
      .product-card {
        display: flex;
        gap: 1.5rem;
        padding: 1.5rem;
      }
      .product-card img {
        width: 150px;
        flex-shrink: 0;
      }
      .product-card .title {
        font-size: 1.25rem;
        color: #2c3e50;
      }
    }
    
    /* Konteyner 600px'den geniş olduğunda */
    @container (min-width: 600px) {
      .product-card {
        flex-direction: column;
        text-align: center;
        border: 2px solid #3498db;
      }
      .product-card img {
        width: 100%;
      }
    }

Gördüğünüz gibi, `.product-card` bileşeni, içinde bulunduğu `.card-container`'ın genişliğine göre tamamen farklı bir layout ve stile bürünebiliyor. ⚙️

Container Unit'ler (cqw, cqh, cqi, cqb)

Container Queries ile birlikte yepyeni bir birim seti de geldi: Container Units. Tıpkı viewport birimleri (`vw`, `vh`) gibi çalışırlar, ama viewport'a değil, tanımlı konteynerin boyutlarına göre hesaplanırlar.
  • cqw: Konteyner genişliğinin %1'i.
  • cqh: Konteyner yüksekliğinin %1'i.
  • cqi: Konteynerin inline boyutunun (yatay yazıda genişlik) %1'i.
  • cqb: Konteynerin block boyutunun (yatay yazıda yükseklik) %1'i.

Örneğin:
Kod:
.product-card .title {
  /* Konteyner genişliğinin %5'i kadar font boyutu. Dinamik ve mükemmel! */
  font-size: 5cqi;
}

Tarayıcı Desteği ve Geriye Dönük Uyumluluk

Bu özellik artık tüm modern tarayıcıların (Chrome, Edge, Safari, Firefox) son sürümleri tarafından destekleniyor. 🎉 Eski tarayıcıları desteklemeniz gerekiyorsa, @supports kuralı ile ilerleyebilirsiniz.

Kod:
/* Container Queries desteklenmiyorsa, Media Query'ye düş */
.product-card {
  padding: 1rem;
}

@supports (container-type: inline-size) {
  .card-container {
    container-type: inline-size;
  }
  /* Container Query kurallarını buraya yaz */
}

/* Desteklenmiyorsa, yedek bir Media Query */
@media (min-width: 768px) {
  .product-card {
    display: flex;
  }
}

Ne Zaman Kullanmalı?
  • Tasarım Sistemleri & UI Kütüphaneleri geliştiriyorsanız, bileşenlerinizin her yerde doğru görünmesini sağlamak için biçilmiş kaftan.
  • CMS ile çalışıyorsanız, içerik editörlerinin bileşenleri farklı genişlikteki sütunlara sürükleyip bırakabilmesi için ideal.
  • Karmaşık, modüler dashboard arayüzleri oluşturuyorsanız, her widget'ın kendi alanına uyum sağlaması çok değerli.

**Son Söz**
Container Queries, responsive tasarım anlayışımızı bileşen seviyesine taşıyor. Media Queries'in yerini tamamen alacak değil (global düzen için onlar hala kritik), ancak onları tamamlayıcı güçlü bir araç. Yeni projelerinizde mutlaka deneyin ve bileşenlerinizin bağımsız, akıllı ve her ortama uyum sağlayabilen yapılar haline gelmesinin keyfini çıkarın. 💻

Sorularınız olursa, yorumlarda bekliyorum. Bir sonraki rehberde görüşmek üzere, kodlamaya devam!
 

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