docs.rodeo

MDN Web Docs mirror

ShadowRoot

{{APIRef('Shadow DOM')}} 

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 {{domxref("Element.shadowRoot")}}  property, provided it was created using {{domxref("Element.attachShadow()")}}  with the mode option set to open.

{{InheritanceDiagram}} 

Instance properties

Instance methods

Events

The following events are available to ShadowRoot via event bubbling from {{domxref("HTMLSlotElement")}} :

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 {{domxref("Element.shadowRoot")}} . From here we use standard DOM traversal techniques to find the {{htmlelement("style")}}  element inside the shadow DOM and then update the CSS found inside it:

function updateStyle(elem) {
  const shadow = elem.shadowRoot;
  const childNodes = shadow.childNodes;
  for (const node of childNodes) {
    if (node.nodeName === "STYLE") {
      node.textContent = `
div {
  width: ${elem.getAttribute("l")}px;
  height: ${elem.getAttribute("l")}px;
  background-color: ${elem.getAttribute("c")};
}
      `;
    }
  }
}

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

In this article

View on MDN