Middle
Was ist Shadow DOM?
sobes.tech KI
Antwort von AI
Shadow DOM ist ein Web-Standard, der es ermöglicht, HTML, CSS und JavaScript in separate, vom Hauptdokument isolierte Blöcke zu kapseln.
Hauptkonzepte:
- Shadow Host: DOM-Element, an das Shadow DOM angehängt wird.
- Shadow Tree: Isolierter DOM-Baum.
- Shadow Boundary: Grenze zwischen Shadow DOM und dem Hauptdokument.
- Shadow Root: Wurzelknoten des Shadow Tree. Wird mit
element.attachShadow({ mode: 'open' | 'closed' })erstellt:open: Shadow Root ist von außen überelement.shadowRootzugänglich.closed: Shadow Root ist von außen nicht zugänglich.
Vorteile:
- Stil-Kapselung: In Shadow DOM definierte Stile dringen nicht nach außen durch und beeinflussen das Hauptdokument nicht. Standardmäßig beeinflussen Stile des Hauptdokuments den Shadow DOM nicht, dies kann jedoch kontrolliert werden.
- DOM-Kapselung: Elemente innerhalb des Shadow DOM sind im Haupt-DOM-Baum nicht sichtbar, was versehentliche Überschneidungen von Selektoren und Manipulationen verhindert.
- Verhaltenskapselung: Logik und Ereignis-Handler können im Shadow DOM isoliert werden.
Beispiel für die Erstellung eines Shadow DOM:
// Erstellen eines neuen DIV-Elements
const hostElement = document.createElement('div');
// Shadow DOM an das Element anhängen
const shadowRoot = hostElement.attachShadow({ mode: 'open' });
// Inhalt zum Shadow DOM hinzufügen
shadowRoot.innerHTML = `
<style>
/* Stil nur innerhalb dieses Shadow DOMs */
p {
color: blue;
}
</style>
<p>Dies ist ein Text innerhalb des Shadow DOM</p>
`;
// Host-Element zum Hauptdokument hinzufügen
document.body.appendChild(hostElement);
Anwendungen:
- Wiederverwendbare Web-Komponenten erstellen.
- Stilisolierung externer Bibliotheken.
- Schutz interner Komponenten-Details vor externen Eingriffen.
Eigenschaften bei der Arbeit mit Stilen:
- Externe Stile beeinflussen standardmäßig nicht das Shadow DOM.
:hostPseudo-Klasse kann verwendet werden, um den Shadow Host innerhalb des Shadow DOM zu stylen.:host-context()kann verwendet werden, um basierend auf dem Kontext des Shadow Host zu stylen.::slotted()Pseudo-Element kann verwendet werden, um Elemente zu stylen, die in Slots (<slot>) platziert sind.
<my-component>
<!-- Dieses Element wird in den Slot innerhalb des Shadow DOM "gesendet" -->
<span>Slot-Inhalt</span>
</my-component>
// Innerhalb des Shadow DOM des my-component
const shadowRoot = this.attachShadow({ mode: 'open' });
shadowRoot.innerHTML = `
<style>
/* Stil für das Element, das in den Slot mit dem Namen "my-slot" eingefügt wurde */
::slotted(span) {
font-weight: bold;
}
</style>
<div>Hauptinhalt des Komponenten</div>
<slot></slot> <!-- Hier wird der Slot-Inhalt angezeigt -->
`;
Shadow DOM ist Teil der Web Components-Spezifikation.