HTML Academy · Les

Declaratieve Shadow DOM

Koppel Shadow DOM vanuit HTML zonder JavaScript met shadowrootmode

Les 1 van 414 stappen

Declaratieve Shadow DOM is een gratis HTML Academy-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject HTML Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus HTML Academy bevat in totaal 4 lessen.

Het probleem dat dit oplost

Traditionele Shadow DOM wordt gemaakt via JavaScript (attachShadow). Voor servergerenderde pagina's betekent dit dat de shadow tree leeg is totdat JavaScript wordt uitgevoerd — daarmee gaat het doel van SSR, het leveren van volledige HTML bij de eerste byte, verloren. Declarative Shadow DOM lost dit op.

Het shadowrootmode-attribuut

Een <template> met shadowrootmode="open" declareert tijdens het parsen een shadow root in HTML. De browser koppelt de shadow root automatisch aan het bovenliggende element; de inhoud van de template wordt de shadow tree. Geen JavaScript nodig.

<my-card>
  <template shadowrootmode="open">
    <style>:host { display: block; padding: 16px; }</style>
    <slot></slot>
  </template>
  <p>This goes into the slot</p>
</my-card>

SSR met webcomponenten

Declarative Shadow DOM maakt echte servergerenderde webcomponenten mogelijk: de server schrijft de volledige shadow tree inline weg, de browser parseert en koppelt die voordat JavaScript wordt uitgevoerd, en hydration-JavaScript kan voortbouwen op een volledig gerenderde basis. Op gelijke voet met SSR van frameworks.

Modus: open of closed

Dezelfde modi als bij imperatieve attachShadow: shadowrootmode="open" maakt de shadow beschikbaar als element.shadowRoot; shadowrootmode="closed" verbergt die. Het gedrag is identiek aan dat van de met JavaScript gekoppelde tegenhanger.

Eenmalig geparseerd per element

De browser koppelt de shadow root de eerste keer dat hij <template shadowrootmode> ziet. Zodra die is gekoppeld, wordt de template verbruikt — als je er later naar zoekt, krijg je niets terug. Dit komt overeen met de levensduur van attachShadow: een shadow bestaat zolang het element bestaat.

Slots werken normaal

Lichte kinderen (de <p> buiten de <template> in het voorbeeld) worden geprojecteerd in <slot>-elementen binnen de shadow tree, net als bij imperatieve Shadow DOM. De compositie werkt hetzelfde; alleen het mechanisme voor koppelen verschilt.

Combineren met aangepaste elementen

Als <my-card> een geregistreerd aangepast element is, gebruikt het upgradeproces de al gekoppelde shadow root in plaats van opnieuw attachShadow aan te roepen. De klasse van het aangepaste element kan this.shadowRoot in zijn connectedCallback lezen zonder die zelf te hoeven maken.

Ondersteuning door serverhulpmiddelen

De render van Lit-html, Astro-componenten en verschillende andere frameworks leveren nu declaratieve Shadow DOM mee in hun SSR-uitvoer. Zelf bouwen is haalbaar: elk systeem voor sjablonen op basis van tekenreeksen kan de template met shadowrootmode schrijven.

Browserondersteuning

Declarative Shadow DOM is beschikbaar in Chrome, Edge, Safari en Firefox. Oudere browsers negeren het element <template> stilletjes — de inhoud in de template is onzichtbaar, wat een elegante terugval vormt voor omgevingen zonder ondersteuning.

Polyfillstrategie

Voor bredere ondersteuning kan een klein script door de DOM lopen en template[shadowrootmode] omzetten in echte shadow roots. Voer het uit voordat je aangepaste elementen registreert, zodat upgrades van volgende componenten de verwachte shadow tree zien.

Afwegingen

Declarative Shadow DOM dupliceert de structuur: de inhoud van de template staat in de HTML, hoewel die ook in de klasse van het component is ingebouwd. Voor pagina's met veel exemplaren van hetzelfde component vergroot dit de payload. Frameworks ontdubbelen dit; bij zelfgeschreven SSR wil je dat mogelijk ook doen.

Wanneer je dit moet invoeren

Als je webcomponenten levert en waarde hecht aan rendering vanaf de eerste byte of aan SEO — voer het nu in. De functie is stabiel, wordt ondersteund en verbetert het SSR-verhaal voor toepassingen op basis van webcomponenten aanzienlijk. Voor toepassingen zonder Shadow DOM is dit niet van toepassing.

Kennistoets

Welk probleem lost Declarative Shadow DOM op in vergelijking met imperatieve attachShadow?

Samenvatting

Declarative Shadow DOM gebruikt <template shadowrootmode="open"> binnen een aangepast element om tijdens het parsen een shadow root te koppelen, zonder JS. Dit maakt echte SSR voor webcomponenten mogelijk: de shadow tree, bereikgebonden stijlen en slots werken allemaal vóór hydratatie. Het wordt ondersteund in alle moderne browsers; voor oudere browsers is een polyfill beschikbaar. Frameworks (Lit, Astro) leveren het automatisch.

Gratis beginnen

Leer HTML met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
40
Lessen
159

Veelgestelde vragen

Is de les “Declaratieve Shadow DOM” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad HTML Academy, waaronder “Declaratieve Shadow DOM”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus HTML Academy bevat in totaal 4 lessen.

Wat leer ik in “Declaratieve Shadow DOM”?

Koppel Shadow DOM vanuit HTML zonder JavaScript met shadowrootmode Je oefent met HTML Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met HTML Academy te beginnen?

Ervaring vooraf is niet nodig. HTML Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Declaratieve Shadow DOM”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over HTML Academy?

Ja. Elke les over HTML Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Declaratieve Shadow DOM
  2. De Popover API
  3. Het selectlist-element
  4. Interest Invokers en het command-attribuut
← Terug naar HTML Academy