Hoş Geldiniz! KablosuzForum.net

Tüm özelliklerimize erişmek için şimdi bize katılın. Kaydolup giriş yaptıktan sonra konu oluşturabilir, mevcut konulara yanıt gönderebilir, diğer üyelerinize itibar kazandırabilir, kendi özel mesajlaşma programınızı edinebilir ve çok daha fazlasını yapabileceksiniz. Aynı zamanda hızlı ve tamamen ücretsizdir, peki daha ne bekliyorsunuz?

Soru Sor

Merak ettiğiniz, kafanıza takılan sorular hakkında konu açın, diğer üyelerimiz ve moderatörlerimiz cevaplasın.

Ticaret

Ticari konular açıp güven oluşturmak ve daha fazla satış rakamlarına ulaşmak için hesabını doğrula!

Bize ulaşın

Yönetim kadrosuyla iletişime geçin

Üyeliğini Yükselt!

Üyeliğinizi yükselterek birbirinden ayrıcalıklı özelliklere sahip olun!

HTML-CSS-XML'de Gizli Bileşenler: template ve Shadow DOM ile Sıfır Yinelemeli UI

Resim 1 Resim 2

hamoudabdulrahman

Abdul Rahman Hamoud
KF Kullanıcı
Katılım
17 Eki 2024
Mesajlar
4
Tepkime puanı
2
Puanları
1

HTML-CSS-XML'de Gizli Bileşenler: template ve Shadow DOM ile Sıfır Yinelemeli UI​


Günümüz web sayfaları giderek daha modüler hale geliyor. Ancak bu modülerlik, sayfanın performansını ve sürdürülebilirliğini nasıl etkiler? Bu yazıda, HTML'in <template> etiketi, Shadow DOM ile kapsülleme ve XML benzeri içerik akışını bir araya getirerek nasıl sıfır yenileme (zero-reflow) tabanlı bir kullanıcı arayüzü kurabileceğimizi keşfedeceğiz. Amaç, sayfayı bozmadan, stil ve davranışı bileşenler halinde izole etmek ve gerektiğinde parçaları kolayca yeniden kullanabilmek.

Neden bu konu önemli?
- <template> ile sayfada DOM'a eklemeden önce içerikleri saklayıp gerektiğinde klonlayabiliriz. Bu, tekrarlanan UI bloklarını tek bir yerde tanımlayıp birçok yerde kullanmamızı kolaylaştırır.
- Shadow DOM sayesinde stil izolasyonu sağlarız. İçerik, dışarıdaki CSS ile çarpışmaz ve bileşenin görünümü güvenli bir kapsama içinde kalır.
- Slots ile bileşeni özelleştirebiliriz. Bileşenin iç kısmını kullanıcıya göre doldurabilir, ancak dış görünümünü sabit tutabiliriz.
- XML tabanlı içerikler (özellikle SVG gibi XML tabanlı diller) ile entegrasyon, modern HTML ile uyumlu çalışır ve erişilebilirlik açısından da net bir yapı sağlar.

Kısa bir pratik yol haritası
- Adım 1: Bileşen için bir template tanımlayın.
- Adım 2: Shadow DOM ile kapsüllemeyi aktif edin ve template içeriğini gövdeye taşıyın.
- Adım 3: Slots ile içeriği dışarıya açın.
- Adım 4: Erişilebilirlik ve performans için temel en iyi uygulamaları uygulayın.

Aşağıda basit bir kullanıcı kartı bileşeni için minimal bir örnek yer alıyor. İlk olarak HTML tarafını inceleyelim:

Kod:
HTML snippet - template tanımı
&lt;template id="user-card-template"&gt;
  &lt;style&gt;
    .user-card { display:flex; flex-direction:column; border:1px solid #ccc; padding:12px; border-radius:8px; background:#fff; font-family: system-ui, Arial; }
    .user-card h3 { margin:0 0 6px; font-size:16px; }
  &lt;/style&gt;
  &lt;div class="user-card"&gt;
    &lt;h3&gt;&lt;slot name="name"&gt;&lt;/slot&gt;&lt;/h3&gt;
    &lt;p&gt;&lt;slot name="bio"&gt;&lt;/slot&gt;&lt;/p&gt;
  &lt;/div&gt;
&lt;/template&gt;
&lt;div id="profile-slot"&gt;&lt;/div&gt;

Kod:
JavaScript snippet - Shadow DOM ile monte etme
const host = document.querySelector('#profile-slot');
const template = document.querySelector('#user-card-template');
const shadow = host.attachShadow({ mode: 'open' });
shadow.appendChild(template.content.cloneNode(true));

// İçeriği doldurma örneği
const nameSlot = shadow.querySelector('slot[name="name"]');
nameSlot.innerText = 'Ayşe Yılmaz';
const bioSlot = shadow.querySelector('slot[name="bio"]');
bioSlot.innerText = 'Kullanıcı arayüzü bileşenleriyle hızlı prototipleme yapan geliştirici.';

Bu iki parçayı bir araya getirdiğinizde, her kart kendi kapsayıcı stiline sahip olur ve sayfanın geri kalanı ile stil çakışmaz. Ayrıca kartları çoğaltırken tek bir template tanımı üzerinden hızlıca çoğaltabilir ve içerikleri değiştirerek farklı kartlar elde edebilirsiniz.

Neler öğreniyoruz?
- template ile davranışsız içerikleri saklayabilir, gerektiğinde DOM'a ekleyebilirsiniz. Bu, sayfa ilk yüklenirken DOM yoğunluğunu azaltır.
- Shadow DOM ile stil izolasyonu sağlar, global CSS kurallarının bileşen üzerinde istenmeyen etkiler yaratmasını engellersiniz.
- Slotlar, bileşenin dış dünyadan aldığı içeriği açık bir noktadan belirlemenizi sağlar; içeriğin bileşenden bağımsız olarak şekillenmesine olanak tanır.
- XML tabanlı içeriklerle entegrasyon, özellikle SVG ve MathML gibi öğelerin HTML içinde temiz ve sürdürülebilir bir şekilde kullanılmasına olanak verir.

İpuçları ve dikkat edilmesi gerekenler
- Erişilebilirlik: Slot içeriğini dinamik olarak doldururken, görünürlüğü ve odaklanabilirliği koruyun. Gerektiğinde aria-label ve role gibi özellikleri düşünün.
- Performans: Template ve Shadow DOM iyi performans sağlar, ancak çok sayıda dinamik güncellemede dikkatli olun. MutationObserver veya batched güncellemeler kullanın.
- Geliştirme deneyimi: Bileşenleri adlandırırken, isimlendirme konvansiyonlarına sadık kalın ve dokümantasyon ekleyin.

XML perspektifi – HTML ile uyumlu ritüeller
- SVG gibi XML tabanlı içerikler HTML içinde sorunsuz çalışır. HTML5 ile birlikte inline SVG kullanmak, XML kurallarına yaklaşan temiz bir entegrasyon sağlar.
- XHTML gibi XML tabanlı yapıların HTML5 ile karıştırılmaması için parser farklılıklarını akılda tutun. Günümüzde çoğu projede HTML5 kullanımı tercih edilmektedir ve bu, basitçe XML benzeri kuralların uygulanmasıyla gerçekleşir.

Kendi projende denemen için kısa bir öneri
- Küçük bir bileşen kütüphanesi gibi düşün ve 2–3 farklı kart tipi için bir template tanımı yap. Ardından her kart için farklı içerikleri slotlarla doldurmayı deneyin. Sonuç olarak, her kart bağımsız olarak stilize olur ve kullanıcı deneyimi bozulmaz.

Soru & paylaşım
- Siz de kendi projelerinizde template + shadow dom kombinasyonunu kullanıyor musunuz? Hangi sınırlamalarla karşılaştınız? Deneyimlerinizi yorumlarda paylaşın, birlikte öğrenelim.


photo-1651609236271-b7d6f8f52ef6
 
Responsive GIF Layout

shape1
shape2
shape3
shape4
shape5
shape6
Geri
Üst