attachShadow und Shadow Root
Erstellen Sie einen gekapselten Shadow-Tree auf einem Host-Element
attachShadow und Shadow Root ist eine kostenlose HTML Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des HTML Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Shadow DOM?
Shadow DOM gibt einem Element einen eigenen isolierten DOM-Baum (den „Shadow Tree“), der im Haupt-DOM der Seite nicht erscheint. Äußeres CSS dringt nicht hinein, inneres CSS nicht hinaus – perfekte Kapselung für Komponenten.
Eine Shadow Root anhängen
Rufen Sie this.attachShadow({ mode: "open" }) im Konstruktor oder in connectedCallback eines benutzerdefinierten Elements auf. Die Methode gibt eine ShadowRoot zurück, die Sie wie einen gewöhnlichen DOM-Baum mit innerHTML, appendChild usw. befüllen können.
class MyCard extends HTMLElement {
constructor() {
super();
const shadow = this.attachShadow({ mode: "open" });
shadow.innerHTML = "<style>p{color:red}</style><p>Hello</p>";
}
}Offener vs. geschlossener Modus
mode: "open" stellt den Shadow Tree als element.shadowRoot bereit. mode: "closed" verbirgt ihn – element.shadowRoot gibt null zurück, sodass externe Skripte nicht in den Tree gelangen können. Closed ist in der Praxis selten nützlich, weil derselbe Code, der das Element definiert, ohnehin seine eigene Referenz behalten kann.
Kapselung von Styles
Styles, die innerhalb des Shadow Tree definiert werden (über <style> oder adoptierte Stylesheets), gelten nur innerhalb dieses Shadow Tree. CSS-Selektoren im Hauptdokument finden niemals Shadow-Nachfahren, und die Styles des Shadow Tree dringen nicht in das Dokument nach außen.
Der :host-Selektor
Innerhalb des Shadow Tree wird das Host-Element (das benutzerdefinierte Element selbst) mit der speziellen :host-Pseudoklasse ausgewählt. :host(.large) trifft zu, wenn der Host die Klasse .large besitzt; :host([disabled]) trifft zu, wenn der Host das disabled-Attribut besitzt.
:host {
display: block;
padding: 16px;
border: 1px solid #ccc;
}
:host([disabled]) {
opacity: 0.5;
pointer-events: none;
}display: block bei benutzerdefinierten Elementen
Benutzerdefinierte Elemente haben standardmäßig display: inline. Wenden Sie innerhalb der Shadow Root :host { display: block } an, damit sich das Element wie eine Komponente auf Blockebene verhält. Wenn Sie dies vergessen, führt das häufig zu Fehlern wie „meine width: 100% wird ignoriert“.
Event-Komposition
Events, die aus dem Shadow Tree nach außen bubblen, werden am Host retargeted. Ein Klick auf einen inneren Button erreicht äußere Listener mit event.target === host. Verwenden Sie event.composedPath(), um das tatsächliche interne Ziel zu sehen, wenn Sie es benötigen.
composed: true für Custom Events
Benutzerdefinierte Events, die innerhalb des Shadow Root ausgelöst werden, überschreiten die Grenze nicht, es sei denn, Sie erstellen sie sowohl mit bubbles: true als auch mit composed: true. Ohne composed sehen äußere Listener auf dem Host das Event nie.
Skripte können nicht eindringen
Skripte außerhalb können das Host-Element abfragen, aber nicht seine Nachfahren im Shadow Tree. document.querySelector("my-card span") gibt nichts zurück, wenn sich das <span> im Shadow Tree befindet. Die Kapselung schützt interne Details vor unbeabsichtigter Kopplung.
Deklarativer Shadow DOM
Wenn sich <template shadowrootmode="open"> im HTML eines Elements befindet, erstellt der Browser den Shadow Tree beim Parsen ohne JavaScript. Dadurch eignen sich serverseitig gerenderte Komponenten besser für Hydration, weil der Shadow Tree bereits vorhanden ist, bevor das JavaScript ausgeführt wird.
Überlegungen zur Performance
Jeder Shadow Root verursacht einen gewissen Overhead – einen zusätzlichen Gültigkeitsbereich für Styles und eine zusätzliche Render-Ebene. Hunderte Shadow Roots sind unproblematisch; Zehntausende können relevant werden. Bei sehr dichten UIs, etwa großen Tabellen oder virtualisierten Listen, sollten Sie ein Profiling durchführen, um zu bestätigen, dass die Kosten des Shadow DOM akzeptabel sind.
Wissenscheck
Was bewirkt der open-Modus, was der closed-Modus nicht bewirkt?
Zusammenfassung
attachShadow({ mode: "open" }) erstellt einen isolierten DOM-Teilbaum, in den CSS und IDs nicht hinein- oder herausgelangen. Stylen Sie den Host mit :host, denken Sie an display: block und verwenden Sie composed: true für Events, die nach außen gelangen müssen. Ansonsten verhält sich der Shadow Tree wie ein regulärer DOM-Teilbaum – innerHTML, appendChild und querySelector funktionieren darin ganz normal.
Häufig gestellte Fragen
Ist die Lektion „attachShadow und Shadow Root“ kostenlos?
Ja — der vollständige Text von „attachShadow und Shadow Root“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des HTML Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der HTML Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „attachShadow und Shadow Root“?
Erstellen Sie einen gekapselten Shadow-Tree auf einem Host-Element Du übst HTML Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um HTML Academy zu starten?
Keine Vorkenntnisse erforderlich. HTML Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.
Wie lange dauert die Lektion „attachShadow und Shadow Root“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser HTML Academy-Lektion Code schreiben und ausführen?
Ja. Jede HTML Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- attachShadow und Shadow Root
- Slot-Elemente zur Inhaltsverteilung
- Gekapselte Stile im Shadow DOM
- Part und Exportparts für externe Formatierung