ShadowRoot
The ShadowRoot interface of the Shadow DOM API is the root node of a DOM subtree that is rendered separately from a document's main DOM tree.
You can retrieve a reference to an element's shadow root using its Element.shadowRoot property, provided it was created using Element.attachShadow() with the mode option set to open.
Properties
ShadowRoot.activeElementRead only-
Returns the
Elementwithin the shadow tree that has focus. ShadowRoot.delegatesFocusRead only-
Returns a boolean that indicates whether
delegatesFocuswas set when the shadow was attached (seeElement.attachShadow()). ShadowRoot.fullscreenElementRead only-
The element that's currently in full screen mode for this shadow tree.
ShadowRoot.hostRead only-
Returns a reference to the DOM element the
ShadowRootis attached to. ShadowRoot.innerHTML-
Sets or returns a reference to the DOM tree inside the
ShadowRoot. ShadowRoot.modeRead only-
The mode of the
ShadowRoot— eitheropenorclosed. This defines whether or not the shadow root's internal features are accessible from JavaScript. ShadowRoot.pictureInPictureElementRead only-
Returns the
Elementwithin the shadow tree that is currently being presented in picture-in-picture mode. ShadowRoot.pointerLockElementRead only-
Returns the
Elementset as the target for mouse events while the pointer is locked.nullif lock is pending, pointer is unlocked, or if the target is in another tree. ShadowRoot.styleSheetsRead only-
Returns a
StyleSheetListofCSSStyleSheetobjects for stylesheets explicitly linked into, or embedded in a shadow tree.
Event handlers
ShadowRoot.onslotchange-
An event handler representing the code to be called when the
slotchangeevent is raised.
Methods
ShadowRoot.getAnimations()-
Returns an array of all
Animationobjects currently in effect, whose target elements are descendants of the shadow tree. ShadowRoot.getSelection()-
Returns a
Selectionobject representing the range of text selected by the user, or the current position of the caret. ShadowRoot.elementFromPoint()-
Returns the topmost element at the specified coordinates.
ShadowRoot.elementsFromPoint()-
Returns an array of all elements at the specified coordinates.
Examples
The following snippets are taken from our life-cycle-callbacks example (see it live also), which creates an element that displays a square of a size and color specified in the element's attributes.
Inside the <custom-square> element's class definition we include some life cycle callbacks that make a call to an external function, updateStyle(), which actually applies the size and color to the element. You'll see that we are passing it this (the custom element itself) as a parameter.
connectedCallback() {
console.log('Custom square element added to page.');
updateStyle(this);
}
attributeChangedCallback(name, oldValue, newValue) {
console.log('Custom square element attributes changed.');
updateStyle(this);
}
In the updateStyle() function itself, we get a reference to the shadow DOM using Element.shadowRoot.
From here we use standard DOM traversal techniques to find the <style> element inside the shadow DOM and then update the CSS found inside it:
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') + ';' +
'}';
}
}
}
Specifications
| Specification |
|---|
| DOM Standard # interface-shadowroot |
Browser compatibility
BCD tables only load in the browser