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ştirmede `@scope` ile CSS Kapsülleme ve Temiz Kod Devrimi 🎯

asteron

Üye
Katılım
14 Mart 2026
Mesajlar
12
Web Geliştirmede `@scope` ile CSS Kapsülleme ve Temiz Kod Devrimi 🎯

Selam dostlar! Uzun zamandır forumda takılıyorum ve birçok arkadaşın, özellikle büyük projelerde CSS'in karmaşıklaşmasından, isim çakışmalarından ve !important savaşlarından şikayet ettiğini görüyorum. BEM, CSS-in-JS, Shadow DOM derken hep bir çözüm aradık. Şimdi, CSS'in kendi içinden gelen ve oyunun kurallarını değiştirebilecek yeni bir silah var: `@scope` kuralı. Gelin, bu yeni ve güçlü özelliği birlikte inceleyelim. ⚙️

@scope Nedir ve Neden İhtiyaç Duyarız?

Basitçe söylemek gerekirse, `@scope` bize CSS seçicilerimiz için bir "kapsam" (scope) belirleme imkanı verir. Tıpkı JavaScript'teki fonksiyon kapsamı gibi düşünebilirsiniz. Bir stil, yalnızca belirli bir "kök" elementin içindeki "hedef" elementlere uygulanır. Bu ne sağlar?

  • İsim Çakışmalarını Önler: `.title` sınıfınızın sadece bir `.card` içindekileri etkilemesini sağlarsınız. Proje genelindeki diğer tüm `.title`lara dokunmaz.
  • Spesifiklik Savaşlarını Bitirir: Çok uzun ve karmaşık seçiciler (`.sidebar .widget .title a:hover`) yazmak zorunda kalmazsınız. Daha basit ve okunabilir CSS.
  • Bileşen Odaklı Geliştirmeyi Destekler: Her bileşenin kendi izole stil alanına sahip olmasını sağlar, bu da bakımı inanılmaz kolaylaştırır.
  • !important Kullanımını Azaltır: Stiller doğal olarak izole olduğu için bir stili ezmek için !important'a başvurmanız gerekmez.

@scope Nasıl Çalışır? Temel Syntax

Syntax'ı oldukça basit ve anlaşılırdır:

Kod:
@scope ([B]kök-seçici[/B]) {
  /* Buradaki stiller sadece 'kök-seçici'nin içindeki elementlere uygulanır */
  [B]hedef-seçici[/B] {
    özellik: değer;
  }
}

Kök Seçici (Scope Root): Stil kapsamının başlayacağı elementi tanımlar.
Hedef Seçici: Bu kökün içindeki, stil verilecek elementi seçer.

Hemen basit bir örnekle görelim:

Kod:
/* GELENEKSEL YOL (Potansiyel çakışma riski) */
.card .title { color: blue; }
.hero .title { color: red; }

/* @scope İLE MODERN YOL */
@scope (.card) {
  .title {
    color: blue;
    font-size: 1.2rem;
  }
  .description {
    color: #666;
  }
}

@scope (.hero) {
  .title {
    color: red;
    font-size: 2.5rem;
  }
}

Burada, `.card` içindeki `.title` mavi, `.hero` içindeki `.title` ise kırmızı olacak. Global bir `.title` stili varsa bile, bu scope'lar onu etkilemeyecek. Tertemiz! 💎

Donut Kapsamı (Donut Scope) ile Daha da Kontrollü

`@scope`'un en harika özelliklerinden biri, bir şeyi hem kapsayıp hem de hariç tutabilmesidir. Buna "donut scope" deniyor.

Kod:
@scope (.article) to (.comments) {
  p {
    line-height: 1.8;
    margin-bottom: 1em;
  }
}

Bu kural şunu söyler: "`.article` elementi içindeki tüm `p` etiketlerine bu stili uygula, ANCAK `.comments` elementi ve onun altındaki hiçbir `p` etiketine uygulama." Yani, yorumlar bölümündeki paragraflar bu stilden etkilenmez. Bu, iç içe geçmiş bileşenlerde inanılmaz bir kontrol sağlar. 🍩

Gerçek Dünya Senaryosu: Bir UI Kart Bileşeni

Bir blog sitesi yaptığımızı düşünelim. Ana sayfada özet kartlar (`PostCard`) ve yan barda yazar bilgisi kartları (`AuthorCard`) var. İkisi de `.card` sınıfını kullanıyor.

Kod:
<!-- HTML -->
<div class="post-list">
  <article class="post-card">...</article>
  <article class="post-card">...</article>
</div>

<aside class="sidebar">
  <div class="author-card">...</div>
</aside>

Kod:
/* @scope OLMADAN - KARGAŞA */
.post-card .title { ... }
.post-card .button { ... }
.author-card .title { ... }
.author-card .button { ... }
/* Her yeni kart tipi için daha uzun seçiciler... */

/* @scope İLE - DÜZEN ve NETLİK */
@scope (.post-card) {
  .title { font-size: 1.5rem; color: #333; }
  .button { background: #0066cc; color: white; }
  .meta { font-size: 0.9rem; color: #888; }
}

@scope (.author-card) {
  .title { font-size: 1.2rem; color: #555; }
  .button { background: #33aa33; color: white; }
  .bio { font-style: italic; }
}

Gördüğünüz gibi, her bileşenin stilleri kendi küçük dünyasında. Birini değiştirirken diğerini bozma ihtimaliniz yok. Bu, özellikle takım çalışmalarında ve tasarım sistemlerinde altın değerinde.

Tarayıcı Desteği ve Geçiş Stratejisi

`@scope` henüz çok yeni bir özellik. 🚀 Şu an itibariyle Chrome ve Edge'in son sürümlerinde, Safari TP'de destekleniyor. Firefox ise yakında desteği getirecek.

Peki şimdi kullanamaz mıyız? Tabii ki kullanabiliriz! İleriyi düşünerek kod yazmak ve graceful degradation (zarif bozulma) sağlamak önemli.

  • Feature Detection ile Kullanın: `@supports` kuralı ile kontrol edebilirsiniz.
    Kod:
    @supports (selector(:scope)) {
      /* @scope kurallarınızı buraya yazın */
    }
    /* Desteklemeyen tarayıcılar için fallback (yedek) stiller */
    .post-card .title { ... }
  • Progressive Enhancement (Aşamalı İyileştirme): Projenize önce geleneksel, daha spesifik seçicilerle başlayın. Tarayıcı desteği yaygınlaştıkça, bu kodları `@scope` ile daha temiz hale getirebilirsiniz. Bu, hiçbir kullanıcının bozuk bir arayüz görmeyeceği anlamına gelir.
  • PostCSS Eklentileri: Build aşamanızda, `@scope` kurallarınızı geleneksel CSS'e çeviren eklentiler kullanabilirsiniz (örneğin, `postcss-scope`). Bu, bugünden geleceğin syntax'ı ile yazmanızı sağlar.

Özet ve Son Tavsiyeler

`@scope`, CSS dünyasına getirdiği kapsülleme (encapsulation) yeteneği ile uzun zamandır özlediğimiz bir çözüm. Bileşen tabanlı framework'ler (React, Vue) ile çalışırken bile, saf CSS ile bileşen stili izolasyonu sağlamak artık çok daha kolay.

  • Yeni bir projeye başlıyorsanız, hemen `@scope`'u denemeye ve alışmaya başlayın.
  • Büyük ve karmaşık bir projeniz varsa, yeni ekleyeceğiniz bileşenlerden başlayarak kademeli olarak `@scope`'a geçiş yapın.
  • Tarayıcı desteğini sürekli takip edin (caniuse.com) ve `@supports` ile güvenli şekilde kullanın.
  • Donut scope (`to ()`) özelliğini, özellikle iç içe geçmiş ve özel durumları olan bileşenlerinizde mutlaka deneyin.

Umarım bu rehber, CSS yazma deneyiminizi bir üst seviyeye taşıyacak bu harika özelliği anlamanıza yardımcı olmuştur. Sorularınızı ve kendi `@scope` deneyimlerinizi aşağıdaki yorumlarda paylaşmayı unutmayın! Hep birlikte öğrenelim. 💻

Kolay gelsin, kodunuz bol olsun!
 

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