Die Kom­ple­xi­tät von Web­pro­jek­ten ist in den ver­gan­ge­nen Jahren rapide gestiegen. So zeichnen sich moderne Seiten häufig nicht nur durch ein eigenes, schwer zu über­bli­cken­des Geflecht aus HTML-, CSS- und Ja­va­Script-Code aus, sondern haben stan­dard­mä­ßig auch immer mehr Inhalte (Widgets, Bilder, Videos etc.) aus anderen Quellen wie sozialen Netz­wer­ken, Streaming-Platt­for­men oder Content Delivery Networks ein­ge­bun­den. Soll dies nicht per iFrame geschehen, steht mit Shadow DOM eine erst­klas­si­ge Al­ter­na­ti­ve für die Ein­bin­dung der­ar­ti­gen Dritt-Contents bereit.

Im folgenden Artikel verraten wir Ihnen, was es mit dieser Un­ter­ebe­ne des Document Object Models (DOM) auf sich hat, für welche weiteren Szenarios sie geeignet ist und wie genau sie sich in die eigene Website im­ple­men­tie­ren lässt.

Was steckt hinter Shadow DOM?

Bei Shadow DOM handelt es sich um eine Unterform des stan­dard­mä­ßi­gen Document Object Models (DOM) und eine der vier ele­men­ta­ren Säulen der 2012 vom W3C-Kon­sor­ti­um stan­dar­di­sier­ten Web Com­pon­ents. Ein solches „Schatten“-DOM wird von gängigen Browsern wie ein ge­wöhn­li­ches DOM au­to­ma­tisch aus dem HTML-Code generiert, gilt aber nicht für das gesamte Web­pro­jekt, sondern nur für die in ihm aus­ge­drück­te(n) Projekt-Kom­po­nen­te(n). Zudem grenzen Shadow DOMs die ent­hal­te­nen Elemente von jeglichen Design- und Struk­tu­rie­rungs­vor­ga­ben ab, die pro­jekt­über­grei­fend gelten – wie etwa bestimmte CSS-An­wei­sun­gen. Ver­ein­facht gesagt sind Shadow DOMs also ei­gen­stän­di­ge Code-Kapseln innerhalb eines ge­wöhn­li­chen DOMs, die einen eigenen Gül­tig­keits­be­reich besitzen.

Hinweis

Die Be­zeich­nung als „Modell“ ist – sowohl für DOM als auch Shadow DOM – prin­zi­pi­ell eher un­zu­tref­fend. Genau genommen handelt es sich nämlich in beiden Fällen um Schnitt­stel­len für den Da­ten­zu­griff. Das zu­grun­de­lie­gen­de Ob­jekt­mo­dell spielt lediglich für die Gül­tig­keit dieser Schnitt­stel­len eine wichtige Rolle.

Wie sind Shadow DOMs aufgebaut?

Die Nutzung von Shadow DOMs ist gleich­be­deu­tend damit, dass neben dem ge­ne­rel­len Do­ku­men­ten­baum, der die DOM-Struktur des gesamten Projekts zu­sam­men­fasst, eine beliebige Zahl an Shadow Trees (dt. „Schatten-Bäume“) existiert. Jeder dieser Bäume, deren Wurzel als Shadow Root (dt. „Schatten-Wurzel“) be­zeich­net wird, enthält seine eigenen Elemente und sein eigenes Styling. Dabei sind die Trees immer einem be­stimm­ten Element aus dem über­ge­ord­ne­ten Do­ku­men­ten­baum oder aus einem anderen Shadow Tree zu­ge­ord­net. In beiden Fällen spricht man vom so­ge­nann­ten Shadow Host (dt. „Schatten-Host“). Der Übergang zwischen normalem und ver­steck­tem DOM wird als Shadow Boundary (dt. „Schatten-Grenze“) be­zeich­net.

Wie funk­tio­niert die Nutzung bzw. Im­ple­men­tie­rung von Shadow DOMs genau?

Um die Shadow-DOM-Schnitt­stel­le in einem Web­pro­jekt zu nutzen, müssen Sie keine zu­sätz­li­che Software in­stal­lie­ren oder einbinden. Da es sich technisch gesehen lediglich um das Anlegen eines Un­ter­baums im Quelltext handelt, können Sie einen neuen Shadow DOM jederzeit über das HTML-Dokument Ihrer Web­an­wen­dung im­ple­men­tie­ren. Das Rendering funk­tio­niert später gemeinsam mit dem kom­plet­ten, über­ge­ord­ne­ten DOM, sodass auch hierfür keine zu­sätz­li­chen Aktionen er­for­der­lich sind.

Wie un­kom­pli­ziert die Ein­bin­dung ver­steck­ter, un­ter­ge­ord­ne­ter DOM-Kapseln ist, ver­deut­licht folgendes Beispiel, das dem HTML-Dokument mit einem einfachen Ja­va­Script ein Shadow Dom mit

-Element inklusive eigenen Styling-An­wei­sun­gen hinzufügt:

<html>
<head></head>
<body>
<p id="hostElement"></p>
<script>
    // Das Shadow DOM für den Shadow Host erzeugen:
    var shadow = document.querySelector('#hostElement').createShadowRoot();
    // Ein HTML-Element im Shadow DOM anlegen:
shadow.innerHTML = '<p>Dieser Text steht im Shadow DOM.</p>';
    // Das HTML-Element im Shadow DOM stylen:
shadow.innerHTML += '<style>p { color: red; }</style>';
</script>
</body>
</html>

Das Skript für die Im­ple­men­tie­rung des Shadow DOM besteht also aus drei Be­stand­tei­len: Zunächst wird das ver­steck­te Sub-Dokument generiert, im zweiten Schritt erhält dieses ein einfaches Text­ele­ment und schließ­lich wird mit der dritten Kom­po­nen­te auch noch die Farbe dieses Textes ma­ni­pu­liert (in diesem Fall: „red“, also Rot).

Hinweis

Damit ein Shadow DOM von außerhalb per Ja­va­Script an­ge­steu­ert werden kann, muss der Status der Methode element.shadow­Root außerdem auf „open“ (dt. offen) gesetzt sein. Ist an dieser Stelle statt­des­sen „closed“ definiert, bleibt der Zugang zu dem ver­steck­ten DOM verwehrt.

Für welche Szenarien ist Shadow DOM geeignet?

Shadow DOMs bieten Ihnen eine erst­klas­si­ge Ge­le­gen­heit, einzelne Elemente Ihres Web­pro­jekts ab­ge­son­dert vom Rest der Seite zu behandeln, ohne hierfür auf spezielle Tech­no­lo­gien wie iFrames zu­rück­grei­fen zu müssen. Zudem werden sie mitt­ler­wei­le von den gängigen Browsern, wie alle Techniken der modernen Web Com­pon­ents, ohne Ein­schrän­kun­gen un­ter­stützt. Wollen Sie also eine bestimmte Kom­po­nen­te bzw. einen be­stimm­ten Bereich Ihrer Website ganz un­ab­hän­gig von do­ku­men­ten­über­grei­fen­den Styling-An­wei­sun­gen und Struk­tu­ren gestalten, sind ver­steck­te DOMs eine gute und leicht zu im­ple­men­tie­ren­de Wahl – ins­be­son­de­re in komplexen Projekten.

Sie können al­ler­dings nicht alle HTML-Elemente zu einem Shadow Host machen. Wenden Sie die Technik bei­spiels­wei­se auf eine Bilddatei an, hat das einen Fehler inklusive ent­spre­chen­der Meldung zur Folge. Konkret sind Shadow DOMs auf folgende HTML-Kom­po­nen­ten be­schränkt:

  • article
  • aside
  • block­quo­te
  • body
  • div
  • footer
  • h1, h2, h3, h4, h5, h6
  • header
  • main
  • nav
  • p
  • section
  • span
Zum Hauptmenü