HTML Tag Reference

exportparts 属性

親のシャドーツリーにパーツをエクスポートする

exportparts 属性は、Shadow tree(シャドウツリー)内にあるすべての要素で使用できる属性です。exportparts 属性は、ネストしたシャドーツリーにおいて、親となるシャドーツリーに対し、要素がもつパーツ要素(part 属性を持つ要素)をエクスポートします。

例えば、下記のように #example-custom-element-outer#example-custom-element-inner が入れ子になっており、カスタム要素(example-custom-element)に挿入されたとします。

<template id="example-custom-element-outer">
  <example-custom-element-inner></example-custom-element-inner>
</template>

<template id="example-custom-element-inner">
  <span part="part-01">01</span>
  <span part="part-02">02</span>
  <span part="part-03">03</span>
</template>

<!-- ↓に JavaScript で #example-custom-element-outer を挿入 -->
<example-custom-element></example-custom-element>

この時、下記のようにスタイルを指定しても、<span part="part-01">01</span> および <span part="part-02">02</span> にこのスタイルは適用されません。

<style>
  example-custom-element::part(part-01 part-02) {
    color: red;
  }
</style>

なぜなら、::part() 疑似要素がマッチするのは、シャドーホストである example-custom-element 要素内でシャドウルートとなる、#example-custom-element-outer がもつパーツ要素のみだからです。

このような状況で、<span part="part-01">01</span><span part="part-02">02</span> にスタイルを適用したい場合、exportparts 属性を使用して、親のシャドーツリーにパーツ要素をエクスポートします。

<template id="example-custom-element-outer">
  <example-custom-element-inner exportparts="part-01, part-02"></example-custom-element-inner>
</template>

<template id="example-custom-element-inner">
  <span part="part-01">01</span>
  <span part="part-02">02</span>
  <span part="part-03">03</span>
</template>

また、もし下記のようなスタイルが指定されているとき、

<style>
  example-custom-element::part(foo) {
    color: red;
  }
</style>

<span part="part-01">01</span> をこのスタイルが適用されるように(part-01foo として)エクスポートしたい場合は、下記のようにコロン(:)で区切って記述することも可能です。

<template id="example-custom-element-outer">
  <example-custom-element-inner exportparts="part-01 : foo"></example-custom-element-inner>
</template>

<template id="example-custom-element-inner">
  <span part="part-01">01</span>
  <span part="part-02">02</span>
  <span part="part-03">03</span>
</template>

この場合、<span part="part-02">02</span> はエクスポートされていない状態になるため、スタイルは適用されず、<span part="part-01">01</span> のみ、文字色が赤くなることになります。

下記のように、複数の指定をすることも可能です。

<style>
  example-custom-element::part(foo) {
    color: red;
  }
  example-custom-element::part(bar) {
    color: blue;
  }
</style>

<template id="example-custom-element-outer">
  <example-custom-element-inner exportparts="part-01 : foo, part-02 : bar"></example-custom-element-inner>
</template>

exportparts 属性は、HTML Standard 仕様ではなく、CSS Shadow Parts 仕様で定義されています。

exportparts 属性の仕様

この属性を使用できる要素
  • すべての HTML 要素

用途から目的の要素を探す

用途から HTML 要素を逆引きできます。