CodeBlanks Logo Icon CodeBlanks

Şablon ve slot

HTML kursu · İleri seviye · Ders 50/56

<template> ve <slot> ile yeniden kullanılabilir parça yazarsın.

<template> ile iskelet tanımla

<template> etiketi sayfada görünmeyen bir HTML iskeleti tutar. İçine yazdığımız etiketler render edilmez; biz bunu JavaScript ile kopyalayıp sayfaya yerleştiririz.

Bu sayede aynı widget iskeletini bir kere yazıp birçok kez kullanabiliriz. Örneğin satış panelinde her bölge için ayrı widget yazmak yerine tek bir <template> tanımlarız.

Template içine normal HTML yazarız; <article>, <header> gibi etiketler yer alabilir.

<slot> ile içerik yuvası

<slot>, template içindeki bir yer tutucudur. Kopyalama sırasında dışarıdan içerik buraya enjekte edilir.

Slot'a name özniteliği veririz; örneğin <slot name="content">. Eğer dışarıdan içerik gelmezse, slot'un içine yazdığımız fallback gösterilir.

Örnek: <slot name="content"><p>Veri bekleniyor</p></slot> — içerik gelene kadar 'Veri bekleniyor' yazar.

Uygulama Body'ye template ve slot ekle

Önceki dersin widget'ını al. </section>'dan sonra, </body>'den önce bir <template> ekle.

Template'e id="widget-template" özniteliği ver. İçine bir <article> koy; onun içine <header> ve <h2> (içeriği Yeni Satış Paneli) ekle. Header'dan sonra <slot name="content"> ekle ve içine fallback olarak <p>Veri bekleniyor</p> koy.

Örnek çözümü göster
<!DOCTYPE html>
<html lang="tr">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Satış Paneli</title>
  </head>
  <body>
    <section>
      <header>
        <h1>Satış Paneli</h1>
      </header>
      <main>
        <article>
          <figure>
            <figcaption>Aylık ciro</figcaption>
            <p>₺124.500</p>
          </figure>
          <table>
            <thead>
              <tr>
                <th>Ürün</th>
                <th>Satış</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td>Pamuklu tişört</td>
                <td>320</td>
              </tr>
              <tr>
                <td>Keten pantolon</td>
                <td>184</td>
              </tr>
            </tbody>
          </table>
        </article>
      </main>
    </section>
    <template id="widget-template">
      <article>
        <header>
          <h2>Yeni Satış Paneli</h2>
        </header>
        <slot name="content">
          <p>Veri bekleniyor</p>
        </slot>
      </article>
    </template>
  </body>
</html>

Kendini test et

  1. <template> etiketinin temel özelliği nedir?

    • İçeriği anında ekrana basar
    • İçeriği sayfa yüklendiğinde gizler
    • Yalnızca CSS stilleri tanımlar
    • İçeriği bir kere yazılır, sonra kopyalanır; doğrudan render edilmez
    Cevabı göster

    İçeriği bir kere yazılır, sonra kopyalanır; doğrudan render edilmez — Doğru! template içeriği render edilmez; kopyalanıp sayfaya yerleştirilir.

  2. Slot adını tamamla

    <slot name="____">
      <p>Veri bekleniyor</p>
    </slot>
    Cevabı göster
    <slot name="content">
      <p>Veri bekleniyor</p>
    </slot>
  3. Şablon kavramlarını eşleştir

    template
    Yeniden kullanılabilir iskelet
    slot
    İçerik yuvası
    fallback
    Yuva boşsa gösterilen içerik
    article
    Bağımsız içerik birimi

İleri seviye bölümündeki tüm dersler