コンテナクエリは、親要素(コンテナ)のサイズに応じて子要素のスタイルを設定することができるが、親要素のスタイル値もクエリすることができる。スタイルクエリ(@container style())は、2023年にChromiumで追加され、Safari TP 190の登場によりSafariでも導入されることになった。CSSのカスタムプロパティを使用してコンテナのスタイルを適用できる。
以下の例は、親要素がイタリック体の場合に、iとem要素のスタイルを変更させる。
@container style(font-style: italic) {
i,
em {
background: lavender;
}
}
以下の例は、いくつかの異なるスタイルのボックスが表示され、すべて–themeカスタムプロパティの値でコントロールしている。
<div style="--theme: dark">
<div class="demo-card">
<figure>FPO</figure>
<p>This card has <code class=" hljs ">--theme: dark</code> applied to the parent. We can now style its children based on that custom property value.</p>
<button>I am a button</button>
</div>
</div>
@container style(--theme: dark) {
.card {
background: royalblue;
border-color: navy;
color: white;
}
.card button {
border-color: navy;
background-color: dodgerblue;
color: white;
}
}
カスタムプロパティの値を変更するだけで、コンポーネントをテーマ化し、もちろんテーマを解除することもできる。
以下の例は、DOMツリーの上位でオレンジ色のテーマになり、ツリーの下位ではそのテーマが解除された状態になっている。これはスコープ付きCSSに似てるが、コンポーネントの作成ではなく、ページの作成レベルで制御される。
また、表示サイズが500px未満になると、–is-mobile: trueが発動して下部のテキストがboldになる。
See the Pen Container Style Queries !!!! by coliss (@coliss) on CodePen.