Shadow DOM ve Web Components: Kendi HTML Etiketlerinizi Yaratın

crazy_coder

Moderatör
Katılım
20 Şub 2026
Mesajlar
204
Tepkime puanı
0
Puanları
16

1. Web Components Nedir?​


Web Components; framework bağımsız (React, Vue veya Angular'a ihtiyaç duymadan) tekrar kullanılabilir bileşenler oluşturmamızı sağlayan üç ana teknolojinin birleşimidir:


  • []Custom Elements: Yeni HTML etiketleri tanımlama yeteneği.
    []Shadow DOM: Bileşenin stilini ve yapısını ana dökümandan izole etme.
  • HTML Templates (<template>): Sayfa yüklendiğinde render edilmeyen, sadece ihtiyaç anında kopyalanan HTML parçaları.

2. Shadow DOM: Gizli ve İzole Dünya​


Shadow DOM, bir HTML elementinin içine "gizli" bir DOM ağacı eklemenizi sağlar. Bu ağaçtaki CSS kuralları dışarı sızmaz, dışarıdaki CSS kuralları da içeriye etki etmez.

Neden kullanmalıyız?
Diyelim ki bir buton bileşeni yaptınız ve içine .btn { color: red; } yazdınız. Eğer Shadow DOM kullanmazsanız, web sayfanızdaki tüm butonlar kırmızı olur. Shadow DOM kullanırsanız, sadece sizin bileşeninizin içindeki buton kırmızı kalır.

3. Kendi Bileşeninizi Oluşturun (Örnek: <user-card>)​


Hadi, bir kullanıcının bilgilerini şık bir şekilde gösteren özel bir etiket tasarlıyalım.

JavaScript:
class UserCard extends HTMLElement {
constructor() {
super();

    // 1. Shadow Root'u oluşturuyoruz (açık modda)
    const shadow = this.attachShadow({ mode: 'open' });

    // 2. Bileşenin yapısını oluşturuyoruz
    const container = document.createElement('div');
    container.innerHTML = `
        <style>
            .card {
                background: #f4f4f4;
                padding: 15px;
                border-radius: 8px;
                border-left: 5px solid #333;
                font-family: sans-serif;
            }
            h3 { color: #2c3e50; }
        </style>
        <div class="card">
            <h3>${this.getAttribute('name') || 'İsimsiz Kullanıcı'}</h3>
            <p><slot name="email">E-posta belirtilmedi.</slot></p>
        </div>
    `;

    // 3. Shadow DOM'a ekliyoruz
    shadow.appendChild(container);
}

}

// 4. Yeni etiketimizi tarayıcıya kaydediyoruz
customElements.define('user-card', UserCard);

HTML'de Kullanımı:
HTML:
<user-card name="Ahmet Yılmaz">
<span slot="email">[email protected]</span>
</user-card>

4. Lifecycle (Yaşam Döngüsü) Metodları​


Özel elementlerin belirli aşamalarda çalışan özel fonksiyonları vardır:


  • []connectedCallback: Element sayfaya (DOM'a) eklendiğinde çalışır.
    []disconnectedCallback: Element sayfadan kaldırıldığında çalışır.
  • attributeChangedCallback: Elementin bir özelliği (attribute) değiştiğinde tetiklenir.

Neden Web Components?​


ÖzellikFramework Bileşenleri (React vb.)Web Components (Native)
BağımlılıkKütüphane yüklü olmalıSıfır bağımlılık (Native JS)
İzolasyonCSS çakışması olabilirShadow DOM ile tam izolasyon
ÖmürSürüm güncellemeleri gerekebilirStandart HTML'dir, yıllarca çalışır



Sonuç

Web Components ve Shadow DOM, özellikle büyük ekiplerin çalıştığı projelerde veya farklı projelerde kullanılacak "UI Kütüphaneleri" oluştururken vazgeçilmezdir. Tarayıcının gücünü doğrudan kullanarak, framework kalabalığına girmeden kapsüllenmiş, temiz ve profesyonel modüller yaratabilirsiniz.
 
Geri
Üst