シャドーDOMを使用する別のカスタム要素内であってもどこでも使用できるカスタム要素(シャドーDOMなし)があります。しかし、私は両方の場所で動作するスタイルを取得する方法はわかりません。シャドーDOMの内側と外側の非シャドーDOMカスタム要素の使用
class fancyButton extends HTMLElement {
constructor() {
super();
this.innerHTML = `
<style>
fancy-button button {
padding: 10px 15px;
background: rgb(62,118,194);
color: white;
border: none;
border-radius: 4px
}
</style>
<button>Click Me</button>`;
}
}
customElements.define('fancy-button', fancyButton);
<fancy-button></fancy-button>
、挿入されたスタイルタグはfancy-button
スタイルが動作するようになります:
は例えば、私はシンプルなfancy-button
要素を作成して言うことができます。ただし、このコンポーネントがシャドウDOM要素の外側で使用されると、スタイルタグは要素が使用されるたびに複製されます。
代わりに、htmlインポートファイルの一部としてスタイルタグを追加すると、スタイルはシャドーDOMの外でしか動作しませんが、少なくとも1回宣言されます。
<!-- fancy-button.html -->
<style>
fancy-button button {
padding: 10px 15px;
background: rgb(62,118,194);
color: white;
border: none;
border-radius: 4px
}
</style>
<script>
class fancyButton extends HTMLElement {
constructor() {
super();
this.innerHTML = `<button>Click Me</button>`;
}
}
customElements.define('fancy-button', fancyButton);
</script>
シャドウDOMの内側と外側の両方で使用されるカスタム要素スタイルを追加するにはどうすればよいですか?
最も効果的なのは、それが機能する唯一のソリューションだからです。別の方法は、あなたがShadow DOMにいて、必要に応じてスタイルを追加しているかどうかをテストすることです。 – Supersharp