--- title: ShadowRoot slug: Web/API/ShadowRoot tags: - API - Interface - Reference - ShadowRoot - Web Components translation_of: Web/API/ShadowRoot ---
L'interface ShadowRoot
, relative à l'API Shadow DOM, représente la racine d'un sous-arbre du DOM dont le rendu est effectué séparément de celui du DOM de l'arbre principal.
Il est possible de récupérer une référence à la racine shadow d'un élément via la propriété {{domxref("Element.shadowRoot")}} si la racine a été créée avec la méthode {{domxref("Element.attachShadow()")}} et l'option mode
qui valait open
.
delegatesFocus
a été activée lors de la liaison avec la racine shadow (cf. {{domxref("Element.attachShadow()")}}).ShadowRoot
est attachée.ShadowRoot
.ShadowRoot
: open
ou closed
. Cette valeur indique si les fonctionnalités internes à la racine sont accessibles depuis JavaScript.DocumentOrShadowRoot
L'interface ShadowRoot
inclut les propriétés suivantes grâce au mixin {{domxref("DocumentOrShadowRoot")}}. Attention, ceci n'est actuellement (11/2019) implémenté qu'avec Chrome et les autres navigateurs continuent d'implémenter l'interface {{domxref("Document")}}.
L'interface ShadowRoot
inclut les méthodes suivantes qui proviennent du mixin {{domxref("DocumentOrShadowRoot")}}. Attention, ceci n'est actuellement (11/2019) implémenté qu'avec Chrome et les autres navigateurs continuent d'implémenter l'interface {{domxref("Document")}}.
Les fragments de code suivants sont extraits de l'exemple life-cycle-callbacks (voir le résultat en live) qui crée un élément affichant un carré avec une taille et une couleur fournies par les attributs de l'élément.
Dans la définition de la classe pour l'élément <custom-square>
, on ajoute certains callbacks permettant de gérer le cycle de vie de l'élément avec un appel à une fonction externe updateStyle()
qui applique la taille et la couleur à l'élément. On lui passe l'argument this
(c'est-à-dire l'élément lui-même).
connectedCallback() { console.log("Le carré personnalisé a été ajouté à la page."); updateStyle(this); } attributeChangedCallback(nom, ancienneValeur, nouvelleValeur) { console.log("Les attributs du carré ont changé."); updateStyle(this); }
Quant à la fonction updateStyle()
, voyons ici son fonctionnement. On récupère une référence au shadow DOM avec {{domxref("Element.shadowRoot")}}. Ensuite, on utilise un parcours pour le sous-arbre afin de trouver l'élément {{htmlelement("style")}} présent dans le shadow DOM et on met à jour le CSS pour cet élément :
function updateStyle(elem) { var shadow = elem.shadowRoot; var childNodes = shadow.childNodes; for(var i = 0; i < childNodes.length; i++) { if(childNodes[i].nodeName === 'STYLE') { childNodes[i].textContent = 'div {' + 'width: ' + elem.getAttribute('l') + 'px;' + 'height: ' + elem.getAttribute('l') + 'px;' + 'background-color: ' + elem.getAttribute('c') + ';' + '}'; } } }
Spécification | État | Commentaires |
---|---|---|
{{SpecName('DOM WHATWG','#interface-shadowroot','Interface ShadowRoot')}} | {{Spec2('DOM WHATWG')}} |
{{Compat("api.ShadowRoot")}}