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.activeElement
Read only -
Returns the
Element
within the shadow tree that has focus. -
ShadowRoot.delegatesFocus
Read only -
Returns a boolean that indicates whether delegatesFocus was set when the shadow was attached (see
Element.attachShadow()
). -
ShadowRoot.fullscreenElement
Read only -
The element that's currently in full screen mode for this shadow tree.
-
ShadowRoot.host
Read only -
Returns a reference to the DOM element the
ShadowRoot
is attached to. -
ShadowRoot.innerHTML
-
Sets or returns a reference to the DOM tree inside the
ShadowRoot
. -
ShadowRoot.mode
Read only -
The mode of the
ShadowRoot
— eitheropen
orclosed
. This defines whether or not the shadow root's internal features are accessible from JavaScript. -
ShadowRoot.pictureInPictureElement
Read only -
Returns the
Element
within the shadow tree that is currently being presented in picture-in-picture mode. -
ShadowRoot.pointerLockElement
Read only -
Returns the
Element
set as the target for mouse events while the pointer is locked.null
if lock is pending, pointer is unlocked, or if the target is in another tree. -
ShadowRoot.styleSheets
Read only -
Returns a
StyleSheetList
ofCSSStyleSheet
objects 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
slotchange
event is raised.
Methods
ShadowRoot.getAnimations()
-
Returns an array of all
Animation
objects currently in effect, whose target elements are descendants of the shadow tree. ShadowRoot.getSelection()
-
Returns a
Selection
object 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 (DOM) # interface-shadowroot |
Browser compatibility
Desktop | Mobile | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
ShadowRoot |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
10.3 |
6.0 |
delegatesFocus |
53 |
79 |
94 |
No |
40 |
15 |
53 |
53 |
94 |
41 |
15 |
6.0 |
getSelection |
53 |
79 |
No |
No |
40 |
No |
53 |
53 |
No |
41 |
No |
6.0 |
host |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
10.3 |
6.0 |
innerHTML |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
10.3 |
6.0 |
mode |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
10.3 |
6.0 |
onslotchange |
No |
No |
93 |
No |
No |
14.1 |
No |
No |
93 |
No |
14.5 |
No |
slotAssignment |
86 |
86 |
No |
No |
72 |
No |
86 |
86 |
No |
61 |
No |
14.0 |
activeElement |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
10.3 |
6.0 |
adoptedStyleSheets |
73 |
79 |
No |
No |
60 |
No |
73 |
73 |
No |
50 |
No |
11.0 |
elementFromPoint |
53
Before Chrome 66, this method returned
null when the element was a child of a host node. See issue 759947. |
79 |
63 |
No |
40
Before Opera 53, this method returned
null when the element was a child of a host node. See issue 759947. |
10.1 |
53
Before WebView 66, this method returned
null when the element was a child of a host node. See issue 759947. |
53
Before Chrome 66, this method returned
null when the element was a child of a host node. See issue 759947. |
63 |
41
Before Opera Android 47, this method returned
null when the element was a child of a host node. See issue 759947. |
10.3 |
6.0
Before Samsung Internet 9.0, this method returned
null when the element was a child of a host node. See issue 759947. |
elementsFromPoint |
53
Before Chrome 66, this method returned
null when the element was a child of a host node. See issue 759947. |
79 |
63 |
No |
40 |
11.1 |
53
Before WebView 66, this method returned
null when the element was a child of a host node. See issue 759947. |
53
Before Chrome 66, this method returned
null when the element was a child of a host node. See issue 759947. |
63 |
41 |
11.3 |
6.0
Before Samsung Internet 9.0, this method returned
null when the element was a child of a host node. See issue 759947. |
fullscreenElement |
71 |
79 |
64
63
|
No |
58 |
No |
71 |
71 |
64
63
|
50 |
No |
10.0 |
getAnimations |
84
83
|
84
83
|
75
72-75
|
No |
70
69
|
14 |
84 |
84
83
|
79 |
60 |
14 |
14.0 |
pictureInPictureElement |
69 |
79 |
No |
No |
56 |
13.1 |
No |
No |
No |
No |
13.4 |
No |
pointerLockElement |
53 |
79 |
63 |
No |
40 |
10.1 |
53 |
53 |
63 |
41 |
No |
6.0 |
styleSheets |
53 |
79 |
63 |
No |
40 |
12.1 |
53 |
53 |
63 |
41 |
12.2 |
6.0 |
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/ShadowRoot