1. 開発者向けのウェブ技術
  2. Web API
  3. Element
  4. shadowRoot

このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。

View in English Always switch to English

Element: shadowRoot プロパティ

Baseline 広く利用可能

この機能は広く実装されており、多くのバージョンの端末やブラウザーで動作します。2020年1月以降、すべてのブラウザーで利用可能です。

Element.shadowRoot は読み取り専用のプロパティで、その要素がホストになっているシャドウルートを表します。

既に存在している要素にシャドウルートを追加するには Element.attachShadow() を使用してください。

ShadowRoot オブジェクトインスタンス、またはシャドウルートが modeclosed を設定されて取り付けられた場合は null です(詳しくは Element.attachShadow() を参照してください)。

次のスニペットは life-cycle-callbacks の例から取ったものです (ライブで確認)。その要素の属性で指定された大きさと色の正方形を表示する要素を生成します。

<custom-square> 要素のクラス定義の中に、外部関数である updateStyle() を呼び出すライフサイクルコールバックをいくつか入れて、実際にサイズと色を要素に適用しています。引数として this (カスタム要素そのもの)を渡していることが分かるでしょう。

js
class Square extends HTMLElement {
 connectedCallback() {
 console.log("Custom square element added to page.");
 updateStyle(this);
 }
 attributeChangedCallback(name, oldValue, newValue) {
 console.log("Custom square element attributes changed.");
 updateStyle(this);
 }
}

updateStyle() 関数自体で、Element.shadowRoot を使用してシャドウ DOM への参照を取得します。ここから標準的な DOM 走査技術を使用して、シャドウ DOM 内の <style> 要素を見つけ、その中にある CSS を更新します。

js
function updateStyle(elem) {
 const shadow = elem.shadowRoot;
 const childNodes = Array.from(shadow.childNodes);
 childNodes.forEach((childNode) => {
 if (childNode.nodeName === "STYLE") {
 childNode.textContent = `
 div {
 width: ${elem.getAttribute("l")}px;
 height: ${elem.getAttribute("l")}px;
 background-color: ${elem.getAttribute("c")};
 }
 `;
 }
 });
}

仕様書

仕様書
DOM
# ref-for-dom-element-shadowroot1

ブラウザーの互換性

MDN の改良に協力

協力方法を知る

このページは MDN の貢献者によって に最終更新されました。

AltStyle によって変換されたページ (->オリジナル) /