<slot>
Das <slot>-Element ist ein Platzhalter innerhalb von Web Components, der von außen mit Inhalten befüllt werden kann. Stell dir einen Slot wie ein “Loch” in einem Template vor: Du definierst die Komponente mit ihrer Struktur und ihrem Styling, und die konkreten Inhalte werden erst bei der Verwendung eingesetzt. Mit Named Slots kannst du mehrere Einfügepunkte in einer Komponente definieren, und Fallback-Content zwischen den <slot>-Tags sorgt dafür, dass auch ohne zugewiesenen Inhalt etwas Sinnvolles angezeigt wird.
- Kategorie
- Einbettung & Widgets
- Art
- Inline
- Attribute
- 1
- Beispiele
- 4
- Browser
- 5 von 5
- 0 von 5
- Stand
- 06.02.2026
Grundlagen
Das <slot>-Element funktioniert ausschließlich innerhalb des Shadow DOM einer Web Component. Außerhalb des Shadow DOM hat es keine Wirkung. Die Grundidee: Du baust ein Custom Element mit attachShadow(), platzierst darin ein oder mehrere <slot>-Elemente, und der Browser fügt die Kindelemente der Komponente an den richtigen Stellen ein.
<slot>funktioniert nur innerhalb des Shadow DOM, außerhalb wird es ignoriert- Der Default Slot (ohne
name-Attribut) fängt allen Inhalt auf, der keinem Named Slot zugewiesen ist - Named Slots werden über das
name-Attribut auf dem<slot>definiert und über dasslot-Attribut am Kindelement zugewiesen - Fallback-Content zwischen den
<slot>-Tags wird angezeigt, wenn kein Inhalt von außen zugewiesen wird - Das
slotchange-Event feuert, wenn sich die zugewiesenen Knoten eines Slots ändern - Mehrere Elemente können demselben Named Slot zugewiesen werden, sie werden alle dort eingefügt
- Slots verändern den DOM nicht wirklich: der Browser “projiziert” die Inhalte visuell an die richtige Stelle (sogenanntes “flattened tree”)
Syntax
<script>
class SimpleCard extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.shadowRoot.innerHTML = `
<div class="card">
<div class="title">
<slot name="title">Standard-Titel</slot>
</div>
<div class="content">
<slot>Kein Inhalt vorhanden.</slot>
</div>
</div>
`;
}
}
customElements.define("simple-card", SimpleCard);
</script>
<!-- Verwendung der Komponente -->
<simple-card>
<span slot="title">Meine Karte</span>
<p>Das ist der Inhalt, der im
Default-Slot landet.</p>
</simple-card>Die Komponente definiert zwei Slots: Einen Named Slot title und einen Default Slot für den restlichen Inhalt. Von außen wird <span slot="title"> dem Named Slot zugewiesen, und der <p> landet im Default Slot, weil er kein slot-Attribut hat.
Attribute
1 AttributBeispiele
4 BeispieleEin Card-Wrapper, der beliebigen Inhalt umschließt. Der Default Slot nimmt alles auf, was zwischen die Tags der Komponente geschrieben wird.
<script>
class CardWrapper extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: "open" });
this.shadowRoot.innerHTML = `
<div style="
background: white;
border: 1px solid #e5e7eb;
border-radius: 12px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.08);
">
<slot>Hier könnte dein Inhalt stehen.</slot>
</div>
`;
}
}
customElements.define("card-wrapper", CardWrapper);
</script>
<card-wrapper>
<h3>Willkommen!</h3>
<p>Das ist ein einfacher Card-Wrapper.
Der gesamte Inhalt wird über den
Default Slot eingefügt.</p>
</card-wrapper>