Polymer-shadow-dom-and-styling
ポリマー-シャドウDOMとスタイリング
シャドウDOMは、コンポーネントの構築に使用されるDOMの新しいプロパティです。
例
次のコードでは、ヘッダーコンポーネントにページタイトルとメニューボタンが含まれています。
シャドウDOMでは、*シャドウツリー*と呼ばれるスコープ付きサブツリーで子を見つけることができます。
シャドウルートルートはシャドウツリーの最上部と呼ばれ、ツリーにアタッチされている要素はシャドウホスト(ヘッダーデモ)と呼ばれます。 このシャドウホストには、シャドウルートを指定するshadowRootというプロパティが含まれています。 シャドウルートは、ホストプロパティを使用してホスト要素を識別します。
シャドウDOMと構成
シャドウDOMに要素がある場合、要素の子の代わりにシャドウツリーをレンダリングできます。 <slot>要素をシャドウツリーに追加することにより、要素の子をレンダリングできます。
たとえば、<header-demo>には次のシャドウツリーを使用します。
子を<my-header>要素に追加します-
ヘッダーは、</slot>要素を上記の指定された子に置き換えます-
フォールバックコンテンツ
フォールバックコンテンツは、スロットにノードが割り当てられていないときに表示できます。 例えば-
次のように要素に独自のアイコンを提供できます-
マルチレベル配布
スロット要素をスロットに割り当てることができます。これはマルチレベル配布と呼ばれます。
たとえば、以下に示すようにシャドウツリーの2つのレベルを取ります-
次のコードを考慮してください-
平坦化されたツリーの構造は次のようになります。
シャドウDOMは、配布を確認するために次のスロットAPIを使用します-
- HTMLElement.assignedSlot -スロットへの要素の割り当てがない場合、要素にスロットを割り当て、nullを返します。
- HTMLSlotElement.assignedNodes -flattenオプションをtrueに設定すると、スロットとともにノードのリストを提供し、分散ノードを返します。
- HTMLSlotElement.slotchange -このイベントは、スロットの分散ノードに変更があるとトリガーされます。
イベントのリターゲティング
リスニング要素と同じスコープで要素を表すことができるイベントのターゲットを指定します。 カスタム要素からのイベントを提供します。これは、内部要素ではなく、カスタム要素タグから来ているように見えます。
例
次の例は、Polymer.jsでのイベントのリターゲットの使用を示しています。 indexlというファイルを作成し、その中に次のコードを挿入します。
次に、retarget-eventlという別のファイルを作成し、次のコードを含めます。
出力
アプリケーションを実行するには、作成されたプロジェクトディレクトリに移動し、次のコマンドを実行します。
ここでブラウザを開き、 http://127.0.0.1:8081/ に移動します。 出力は次のようになります。
上記のテキストをクリックしてコンソールを開き、次のスクリーンショットに示すように、リターゲットされたイベントを確認します。
シャドウDOMスタイリング
ホストからシャドウツリーに継承するスタイルプロパティを使用して、シャドウDOMのスタイルを設定できます。
例
DOMテンプレート
DOMテンプレートを使用して、要素のDOMサブツリーを作成できます。 DOMテンプレートを要素に追加することで、要素のシャドウルートを作成し、テンプレートをシャドウツリーにコピーできます。
DOMテンプレートは2つの方法で指定することができます-
- <dom-module>要素を作成します。これはid属性とともに要素の名前と一致する必要があります。
- <dom-module>内に<template>要素を定義します。
例
要素のシャドウDOMのスタイル設定
Shadow DOMでは、フォント、テキストの色、クラスなどのスタイルプロパティを使用して、要素の範囲外に適用せずにカスタム要素のスタイルを設定できます。
- :host *セレクターを使用してホスト要素のスタイルを設定します(シャドウDOMに接続された要素はホストと呼ばれます)。 Polymer-applというファイルを作成し、その中に次のコードを追加します。
前のリンク:/polymer/polymer_custom_elements [chapter]に示すようにアプリケーションを実行し、 http://127.0.0.1:8000/ に移動します。 出力は次のようになります。
スタイルスロットコンテンツ
要素のテンプレートに*スロット*を作成し、実行時に使用することができます。
例
次の例は、要素のテンプレートでのスロット付きコンテンツの使用を示しています。 indexlファイルを作成し、その中に次のコードを追加します。
次に、slotted-contentlという別のファイルを作成し、次のコードを含めます。
前の例のようにアプリケーションを実行し、 http://127.0.0.1:8081/ に移動します。 出力は次のようになります。
スタイルモジュールの使用
スタイルモジュールと共に、要素間でスタイルを共有できます。 スタイルモジュールでスタイルを指定し、要素間で共有します。
例
次の例は、要素間でスタイルモジュールを使用する方法を示しています。 indexlファイルを作成し、その中に次のコードを追加します。
次のコードを使用して、style-modulelという別のファイルを作成します。
次に、_colors-modulel_というファイルをもう1つ作成します。このファイルは、次のコードに示すように、スタイルモジュールを要素に提供します。
アプリケーションを実行し、 http://127.0.0.1:8081/ に移動します。 出力は次のようになります。
カスタムプロパティを使用する
カスタムCSSプロパティを使用して、Polymer要素を使用してアプリケーション内の要素の外観をスタイルできます。 カスタムプロパティはカスケードCSS変数を提供します。これは、スタイルシートを介したスタイルデータの散乱を防ぐカスタム要素の環境外で使用できます。
カスタムプロパティは、構成されたDOMツリーから継承する標準のCSSプロパティと同様に定義できます。 前の例では、要素に定義されたカスタムCSSプロパティを確認できます。
CSS継承では、要素にスタイルが定義されていない場合、次のコードに示すように、親からスタイルを継承します。