DOM d’ombre déclaratif
Attachez un DOM d’ombre depuis le HTML sans JavaScript avec `shadowrootmode`.
DOM d’ombre déclaratif est une leçon HTML Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage HTML Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours HTML Academy comprend 4 leçons au total.
Le problème résolu
Le DOM d’ombre traditionnel est créé par JavaScript (attachShadow). Pour les pages rendues côté serveur, cela signifie que l’arbre d’ombre reste vide jusqu’à l’exécution de JS, ce qui va à l’encontre de l’objectif du SSR : fournir un HTML complet dès le premier octet. Le DOM d’ombre déclaratif résout ce problème.
L’attribut shadowrootmode
Un <template> avec shadowrootmode="open" déclare une racine d’ombre en HTML au moment de l’analyse. Le navigateur rattache automatiquement la racine d’ombre à l’élément parent ; le contenu du modèle devient l’arbre d’ombre. Aucun JavaScript n’est nécessaire.
<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 avec des composants web
Le DOM d’ombre déclaratif permet de véritables composants web rendus côté serveur : le serveur inclut directement l’arbre d’ombre complet, le navigateur l’analyse et le rattache avant toute exécution de JS, puis le JS d’hydratation peut prendre le relais à partir d’une base entièrement rendue. Les composants web sont ainsi sur un pied d’égalité avec le SSR des cadres logiciels.
Mode : ouvert ou fermé
Les modes sont les mêmes que pour attachShadow impératif : shadowrootmode="open" expose la racine d’ombre via element.shadowRoot ; shadowrootmode="closed" la masque. Le comportement est identique à celui de son équivalent attaché par JavaScript.
Analysé une seule fois par élément
Le navigateur rattache la racine d’ombre la première fois qu’il rencontre le <template shadowrootmode>. Une fois rattaché, le modèle est consommé : toute recherche ultérieure ne renvoie rien. Cela correspond au cycle de vie de attachShadow : une racine d’ombre existe pendant toute la durée de vie de l’élément.
Les emplacements fonctionnent normalement
Les enfants du DOM léger, c’est-à-dire le <p> situé à l’extérieur du <template> dans l’exemple, sont projetés dans les éléments <slot> de l’arbre d’ombre, comme avec le DOM d’ombre impératif. Le fonctionnement de la composition est identique ; seul le mécanisme de rattachement diffère.
Combiner avec des éléments personnalisés
Si <my-card> est un élément personnalisé enregistré, le processus de mise à niveau récupère la racine d’ombre déjà rattachée au lieu d’appeler de nouveau attachShadow. La classe de l’élément personnalisé peut lire this.shadowRoot dans son connectedCallback sans avoir besoin de la créer.
Prise en charge par les outils côté serveur
Le render de Lit-html, les composants Astro et plusieurs autres cadres logiciels génèrent désormais un DOM d’ombre déclaratif dans leur sortie SSR. Une solution maison est possible : tout système de création de modèles à partir de chaînes peut écrire le modèle contenant shadowrootmode.
Compatibilité des navigateurs
Le DOM d’ombre déclaratif est disponible dans Chrome, Edge, Safari et Firefox. Les navigateurs plus anciens ignorent silencieusement l’élément <template> : son contenu reste invisible, ce qui assure une dégradation progressive pour les environnements qui ne le prennent pas en charge.
Stratégie de compatibilité
Pour une compatibilité plus large, un petit script peut parcourir le DOM et convertir template[shadowrootmode] en véritables racines d’ombre. Exécutez-le avant tout enregistrement d’élément personnalisé afin que les mises à niveau ultérieures des composants trouvent l’arbre d’ombre attendu.
Compromis
Le DOM d’ombre déclaratif duplique la structure : le contenu du <template> figure dans le HTML alors qu’il est également intégré à la classe du composant. Pour les pages contenant de nombreux exemplaires du même composant, cela alourdit la charge utile. Les cadres logiciels dédupliquent cette structure ; un SSR fait maison peut vouloir faire de même.
Quand l’adopter
Si vous livrez des composants web et vous souciez du rendu dès le premier octet ou du référencement naturel, adoptez-le dès maintenant. La fonctionnalité est stable, prise en charge et améliore considérablement le SSR des applications fondées sur des composants web. Elle ne s’applique pas aux applications qui n’utilisent pas le DOM d’ombre.
Vérification des connaissances
Quel problème le DOM d’ombre déclaratif résout-il par rapport à attachShadow impératif ?
Résumé
Le DOM d’ombre déclaratif utilise <template shadowrootmode="open"> à l’intérieur d’un élément personnalisé pour rattacher une racine d’ombre au moment de l’analyse, sans nécessiter de JS. Il permet un véritable SSR pour les composants web : l’arbre d’ombre, les styles isolés et les emplacements fonctionnent tous avant l’hydratation. Il est pris en charge par tous les navigateurs modernes ; une couche de compatibilité est disponible pour les navigateurs plus anciens. Les cadres logiciels, notamment Lit et Astro, le génèrent automatiquement.
Questions Fréquemment Posées
La leçon « DOM d’ombre déclaratif » est-elle gratuite ?
Oui — le texte complet de « DOM d’ombre déclaratif » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours HTML Academy, passe à CoddyKit PRO. Le cours HTML Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « DOM d’ombre déclaratif » ?
Attachez un DOM d’ombre depuis le HTML sans JavaScript avec `shadowrootmode`. Tu pratiques HTML Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer HTML Academy ?
Aucune expérience préalable n'est requise. HTML Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « DOM d’ombre déclaratif » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon HTML Academy ?
Oui. Chaque leçon HTML Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- DOM d’ombre déclaratif
- L’API Popover
- L’élément `selectlist`
- Déclencheurs d’intérêt et attribut `command`