--- title: ShadowRoot slug: Web/API/ShadowRoot tags: - API - Interface - Reference - ShadowRoot - Web Components - shadow dom - インターフェイス translation_of: Web/API/ShadowRoot ---
ShadowRoot
インターフェイスは Shadow DOM API の1つで、文書の DOM ツリーから分離してレンダリングされた部分木の根ノードを指します。
shadow ツリーが mode
オプションを open
に指定して {{domxref("Element.attachShadow()")}} から作られた場合、shadow root への参照は {{domxref("Element.shadowRoot")}} プロパティによって読み出すことが出来ます。
ShadowRoot
が追加された DOM 要素への参照を返します。ShadowRoot
の内部ツリーへの参照を設定する、または受け取ることが出来ます。ShadowRoot
のモードで open
または closed
の値を取ります。これはシャドウルートの内部の機能に JavaScript からアクセスできるかどうかを定義します。ShadowRoot
インターフェイスは {{domxref("DocumentOrShadowRoot")}} で定義された以下のプロパティを含みます。これは Chrome ブラウザーのみ実装されており、他のブラウザーでは依然 {{domxref("Document")}} インターフェイスで実装されています。
ShadowRoot
インターフェイスは {{domxref("DocumentOrShadowRoot")}} で定義された以下のプロパティを含みます。これは Chrome ブラウザーのみ実装されており、他のブラウザーでは依然 {{domxref("Document")}} インターフェイスで実装されています。
以下のコードは、サイズと色の属性が指定された四角形の要素を作る life-cycle-callbacks の例です。 (実行例)
<custom-square>
要素のクラス定義の中に、外部関数である updateStyle
を呼び出す life-cycle-callbacks が含まれています。updateStyle
は要素のサイズと色を適用しています。this
(カスタム要素自身) をパラメータとして関数に渡していることが分かるでしょう。
connectedCallback() { console.log('四角形のカスタム要素がページに追加されました。'); updateStyle(this); } attributeChangedCallback(name, oldValue, newValue) { console.log('四角形のカスタム要素の属性が変更されました。'); updateStyle(this); }
updateStyle
関数の中では、{{domxref("Element.shadowRoot")}} を利用して shadow DOM への参照を取得しています。shadow DOM 内では、標準的な DOM の探索手法を用いて {{htmlelement("style")}} を探し、CSS を更新しています。
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'); } } }
仕様書 | 状態 | 備考 |
---|---|---|
{{SpecName('DOM WHATWG','#interface-shadowroot','Interface ShadowRoot')}} | {{Spec2('DOM WHATWG')}} |
{{Compat("api.ShadowRoot")}}