外部スタイル設定のためのpartとexportparts
partとexportpartsでShadow DOMのパーツを外部CSSに公開します
「外部スタイル設定のためのpartとexportparts」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。
カプセル化のトレードオフ
Shadow DOM の厳格なスタイルカプセル化により、利用側はコンポーネント内部の個別要素を再スタイルできません。CSS 変数は全体的なプロパティには使えますが、たとえば内部の「close」ボタンに独自の border-radius を設定することはできません。これを解決するのが parts です。
part 属性
シャドウ内部の要素に part="name" を付けます。すると利用側は ::part(name) 疑似要素を使って、その要素を対象にできます。my-dialog::part(close-button) { color: red; } のように記述します。名前を付けた要素がスタイル適用のフックになり、それ以外のシャドウ部分はカプセル化されたままになります。
// Shadow tree:
<button part="close-button">×</button>
// Page CSS:
my-dialog::part(close-button) {
color: red;
border-radius: 50%;
}1 つの要素に複数の part を指定する
名前をスペースで区切ると、1 つの要素を複数の part として公開できます。part="button primary" のように記述します。::part(button) は汎用的に対象にし、::part(primary) はプライマリースタイルの要素として対象にします。それぞれの名前は個別に照合されます。
::part の制限
::part で使用できる疑似クラスには、:hover、:focus、:disabled などの一部のものしかありません。子孫コンビネーターや、さらに詳しい構造的な選択は使用できません。::part(card) p は無効であり、子孫セレクターで part の内部に到達することはできません。
exportparts で part を転送する
カスタム要素が自身のシャドウ内に別のカスタム要素を入れ子にしている場合、内側の要素の part は通常、外側のページには公開されません。入れ子にした要素に exportparts="close-button" を指定すると、その part を外側のホストへ転送できます。
// Outer shadow:
<inner-element exportparts="close-button"></inner-element>
// Page:
outer-element::part(close-button) { color: red; }エクスポート時の名前変更
exportparts="close-button: dismiss" と指定すると、内側の part が外側の要素では新しい名前でエクスポートされます。これにより、外側のコンポーネントは、どの内部要素を組み合わせているかに依存しない、整理された命名インターフェースを提供できます。
parts と CSS カスタムプロパティ
カスタムプロパティは値(色、間隔、フォント)を公開します。parts は要素を公開し、境界線、変形、アニメーションなど、CSS の全機能を利用できます。全体的なデザイントークンにはカスタムプロパティを、個別の要素レベルのカスタマイズには parts を使用してください。両方を同じコンポーネントで併用できます。
テーマ設定のパターン
デザインシステムでは、最もカスタマイズされる要素(ボタン、ヘッダー、インジケーター)用に少数の parts を公開し、色、間隔、タイポグラフィ用には十分な数のカスタムプロパティを提供するのが一般的です。利用者は必要に応じて、値のレベルまたは要素のレベルでテーマを設定できます。
part 名の安定性
part 名はコンポーネントの公開 API の一部になるため、変更すると利用側の CSS が壊れます。「close-button」「header」「track」のように要素の位置ではなく役割を表す名前を選んでください。「first-button」のような位置に基づく名前を避けることで、実装が変化しても API の意味を保てます。
ドキュメントに関するヒント
利用可能なすべての part(エクスポートされた part を含む)をコンポーネントの readme に一覧で記載してください。ドキュメントがないと、利用者は part を見つけるために DOM を調査する必要があり、たまたま見つけた実装に依存することになります。part の一覧は、フレームワークコンポーネントの props の一覧と同じように扱ってください。
ブラウザーの対応状況
::part と exportparts は、すべての最新ブラウザーで利用できます。古い Safari のバージョンでも、現在は ::part をサポートしています。自由に使用してください。非常に古いブラウザー(その多くはすでに使われていません)では、代替策として追加の CSS カスタムプロパティを使用してください。
理解度チェック
exportparts 属性は何を行いますか。
まとめ
part 属性は、::part(name) を介して個々のシャドウ要素を外部スタイルの対象として公開します。カプセル化を壊すことなく、CSS の機能を完全に利用できます。exportparts は、入れ子になったカスタム要素の part を外側のホストへ転送し、必要に応じて名前を変更します。parts と CSS カスタムプロパティを組み合わせて完全なテーマ設定用インターフェースを構築し、コンポーネント API の一部として part の一覧をドキュメント化してください。
よくある質問
「外部スタイル設定のためのpartとexportparts」レッスンは無料ですか?
はい。「外部スタイル設定のためのpartとexportparts」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。
「外部スタイル設定のためのpartとexportparts」で何を学びますか?
partとexportpartsでShadow DOMのパーツを外部CSSに公開します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
HTML Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「外部スタイル設定のためのpartとexportparts」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このHTML Academyレッスンでコードを書いて実行できますか?
はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- attachShadowとShadow Root
- コンテンツ配分のためのSlot要素
- Shadow DOM内のスコープ付きスタイル
- 外部スタイル設定のためのpartとexportparts