Shadow DOM とスロットの説明として正しいものはどれか。
- <slot> は常に shadow ツリー内のテキストしか表示できない
- <slot name=”x”> はホスト要素の子要素側で slot=”x” を付けた要素を表示する
- スロットに入った要素は shadow ツリーへ複製される
- スロットは open モードでしか使えない
正解
- <slot name=”x”> はホスト要素の子要素側で slot=”x” を付けた要素を表示する
解説
スロットは「投影(projection)」の仕組みで、ホストのライトDOM側にある要素を shadow ツリーの表示位置に差し込む。複製ではなく参照(表示)である。open/closed どちらでも動作する。
使用例(サンプルコード)
[ html ]
<user-card>
<span slot="name">Alice</span>
<span slot="role">Admin</span>
</user-card>
<script>
class UserCard extends HTMLElement {
constructor(){
super();
const root = this.attachShadow({mode:'open'});
root.innerHTML = `
<style>.label{font-weight:bold}</style>
<div><span class="label">Name:</span> <slot name="name"></slot></div>
<div><span class="label">Role:</span> <slot name="role"></slot></div>
`;
}
}
customElements.define('user-card', UserCard);
</script>