【コンテナクエリ】

コンテナクエリ とは?

最終更新:
💡 置かれた領域のサイズに合わせて表示を変えるCSS

祖先要素のサイズや状態などを条件に、要素のスタイルを切り替えるCSSの仕組み。ここではサイズを条件にする使い方を扱う。同じカードでも、置かれた領域の幅に合わせた表示を指定できる。

📌 このページのポイント
同じカード、領域の幅で並びを変更 広い領域:700px 狭い領域 280px タイトル 横並び タイトル 縦並び 400px以下で縦並びにする指定の例
サイズのコンテナクエリを使う横書きの模式図。各領域にcontainer-type: inline-sizeを設定し、子孫のカードを切り替える。図の枠の幅は実寸比ではない。
ひよこ ひよこ
メディアクエリと何が違うの?
ペンギン先生 ペンギン先生
画面幅を調べるメディアクエリは、画面全体を基準にするよ。サイズのコンテナクエリは、カードが置かれた領域などを基準にできる。同じ画面でも広いメイン領域は横並び、狭いサイド領域は縦並び、という指定ができるんだ。メディアクエリには画面幅以外の条件もあるよ。
ひよこ ひよこ
どうやって使うの?
ペンギン先生 ペンギン先生
横書きの例では、領域に「container-type: inline-size」を指定し、「@container (max-width: 400px)」の中でカードのスタイルを書くよ。その領域の幅が400px以下なら、子孫のカードに指定が適用される。基準となる要素自身のサイズを条件にして、その基準となる要素自身を変更する仕組みではないんだ。
ひよこ ひよこ
必ずすぐ上の親を見るの?
ペンギン先生 ペンギン先生
条件を調べられる、最も近い祖先要素が基準になるよ。container-nameで名前を付ければ、その名前と条件に合う祖先を指定できる。途中にある普通の要素が、そのままサイズの基準になるとは限らないんだ。
ひよこ ひよこ
cqwやcqhは何を表すの?
ペンギン先生 ペンギン先生
cqwは幅、cqhは高さを調べられる基準となる要素の寸法の1%だよ。ただし、各軸の条件に合う祖先を探すので、幅と高さで基準が同じとは限らない。適した祖先がなければ、その軸の小さいビューポートの寸法を使うんだ。
ひよこ ひよこ
inline-sizeなら高さも基準にできる?
ペンギン先生 ペンギン先生
inline-sizeは文字が並ぶ方向のサイズだよ。横書きなら幅だけをサイズの条件にでき、高さも扱うには「container-type: size」などの設計が必要になる。縦書きでは方向も変わる。既存のレイアウトへの影響と、使う機能の対象ブラウザーでの対応を確認しよう。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンテナクエリ」って出てきたら「置かれた領域のサイズに合わせて表示を変えるCSS」と思えばだいたいOK!
📖 おまけ:英語の意味
「Container Queries」 = コンテナへの問い合わせ
💬 要素の祖先にある領域について条件を調べる、という意味だよ。メディアクエリが画面寸法や利用者の設定などを調べるのに対し、コンテナクエリは要素の祖先を基準にするんだ。

参考資料

← 用語集にもどる