HTML Academy · レッスン

Shadow DOM内のスコープ付きスタイル

シャドーツリー内の要素にだけ作用するCSSを書きます

レッスン 3/413 ステップ

「Shadow DOM内のスコープ付きスタイル」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

デフォルトでの CSS カプセル化

シャドウルート内のすべての <style> ルールは、そのルートの内部だけに適用されます。シャドウツリー内の p { color: red } は、そのシャドウ内の段落だけを赤くします。メインドキュメントの段落には影響せず、メインドキュメントのスタイルもシャドウ内部には届きません。

カプセル化が重要な理由

カプセル化により、大規模なアプリケーションを何十年も悩ませてきたグローバル CSS の問題を解消できます。コンポーネントのスタイルがサイトの CSS によって意図せず上書きされることも、コンポーネントが誤ってサイトを壊すこともありません。この境界を定めるのは慣例ではなく仕様です。

:host 疑似クラス

シャドウ内部から :host を使用すると、ホスト要素をスタイルできます。セレクターで対象を絞るには :host(selector) を使用します。:host([open]) { display: block; } は、open 属性が存在する場合にだけホスト要素に一致します。

継承されるプロパティは引き続き境界を越える

継承可能な CSS プロパティ(color、font-family、line-height)は、継承によってシャドウの境界を越えます。ドキュメントで body { color: blue } を設定すると、シャドウ側で明示的に上書きしない限り、シャドウ内のテキストも青色になります。これは機能の一つであり、タイポグラフィのデフォルトを一貫させられます。

CSS カスタムプロパティで境界を越える

カスタムプロパティ(CSS 変数)はシャドウルートを通じて継承されるため、コンポーネントのテーマ設定 API を公開する標準的な方法です。シャドウ内部で --card-bg: var(--surface, white) を宣言し、利用側がホスト上の --surface を上書きできるようにします。

/* Shadow */
:host {
  background: var(--card-bg, white);
}
/* Page */
my-card {
  --card-bg: #f3f4f6;
}

外部スタイル用の ::part

シャドウ内部の要素に part="name" を付けると、利用側は my-card::part(name) { ... } を使ってスタイルを適用できます。シャドウツリーの大部分をカプセル化したまま、個別のスタイル適用ポイントとして part を使用してください。

Adopted Stylesheets

shadowRoot.adoptedStyleSheets = [sheet] を使用すると、1 つの CSSStyleSheet を複数のシャドウルートで共有でき、繰り返し行われる <style> の解析を避けられます。new CSSStyleSheet() でシートを作成し、sheet.replaceSync(cssText) で内容を設定します。デザインシステムでは大きなパフォーマンス向上につながります。

宣言の順序

シャドウの innerHTML の最上部に <style> タグを配置すると、DOM の残りの部分が構築される前にスタイルが解析されます。これにより、解析の順序が遅れてスタイルが適用される場合に発生する、スタイル未適用コンテンツの一瞬のちらつきを防げます。

祖先に基づくルールのための :host-context

:host-context(.dark-mode) :host は、シャドウの外側にある祖先セレクターに基づいてホストをスタイルします。上位のラッパーに付けたクラスに基づいてコンポーネントのテーマを設定する場合に便利です。ブラウザーの対応状況は良好ですが、対象ブラウザーの対応マトリックスで確認してください。

グローバルリセットは外側に留まる

ドキュメント全体に適用する CSS リセット(body のマージンや box-sizing など)は、シャドウツリーには影響しません。必要なリセットを各シャドウルート内で再適用するか、構築したスタイルシートをすべてのコンポーネントに適用して共有してください。

シャドウスタイルのデバッグ

Chrome DevTools の Elements パネルでは、シャドウルートが「#shadow-root (open)」として表示されます。他の CSS と同じように、:host 疑似クラスや ::part ルールを含め、シャドウスタイルを調査、編集、切り替えできます。

理解度チェック

CSS カスタムプロパティ(変数)が Shadow DOM コンポーネントのテーマ設定に推奨される方法なのはなぜですか。

まとめ

Shadow DOM は、両方向にスタイルをカプセル化します。:host でホストをスタイルし、継承される CSS カスタムプロパティでテーマ設定用のフックを公開し、::part で個別の要素をスタイル可能にします。adoptedStyleSheets でスタイルシートを共有し、ドキュメント全体の CSS は境界を越えないため、各シャドウルート内でリセットを再適用してください。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
40
レッスン
159

よくある質問

「Shadow DOM内のスコープ付きスタイル」レッスンは無料ですか?

はい。「Shadow DOM内のスコープ付きスタイル」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「Shadow DOM内のスコープ付きスタイル」で何を学びますか?

シャドーツリー内の要素にだけ作用するCSSを書きます ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「Shadow DOM内のスコープ付きスタイル」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. attachShadowとShadow Root
  2. コンテンツ配分のためのSlot要素
  3. Shadow DOM内のスコープ付きスタイル
  4. 外部スタイル設定のためのpartとexportparts
← HTML Academyに戻る