【コンテナクエリ】

コンテナクエリ とは?

公開:
💡 「画面幅」ではなく「自分の居場所」で姿を変えるCSS
📌 このページのポイント
コンテナクエリ ― 親の幅で子のスタイルが変わる メインカラム(幅 700px) container-type: inline-size 画像 詳しく見る 横並びレイアウト サイドバー(幅 280px) container-type: inline-size 画像 詳しく見る 縦積みレイアウト 同じコンポーネントが配置場所の幅に応じて変化
コンテナクエリのイメージ
ひよこ ひよこ
メディアクエリとコンテナクエリって何が違うの?
ペンギン先生 ペンギン先生
メディアクエリは「ブラウザの画面幅が768px以下なら」というようにビューポート全体のサイズで判断するんだ。コンテナクエリは「このコンポーネントの親要素の幅が400px以下なら」と、もっとピンポイントで判断する。同じカードコンポーネントでも、メインカラムとサイドバーで別々にスタイルを変えられるよ
ひよこ ひよこ
どうやって使うの?
ペンギン先生 ペンギン先生
まず親要素にcontainer-type: inline-sizeを指定してコンテナとして宣言する。そして@container (max-width: 400px)のように書くと、そのコンテナの幅が400px以下のときだけスタイルが適用されるんだ。container-nameを付ければ、どのコンテナを基準にするか名前で指定もできるよ
ひよこ ひよこ
これまでは同じことができなかったの?
ペンギン先生 ペンギン先生
メディアクエリだけだと、サイドバーが300px幅のとき画面全体は1200pxだからメディアクエリは発動しないんだ。だからサイドバー用に別CSSクラスを書いたり、JavaScriptでリサイズを監視したりしていた。コンテナクエリのおかげで純粋なCSSだけでコンポーネント単位のレスポンシブが実現できるようになったよ
ひよこ ひよこ
cqwっていう単位も使えるの?
ペンギン先生 ペンギン先生
コンテナクエリ単位と呼ばれるもので、cqwはコンテナ幅の1%、cqhはコンテナ高さの1%を表すよ。font-size: 4cqwと書けば、コンテナが狭くなるとフォントも自動で小さくなる。vwのコンテナ版だと思えば分かりやすいね
ひよこ ひよこ
ブラウザ対応はもう大丈夫なの?
ペンギン先生 ペンギン先生
2023年にChrome、Firefox、Safariすべてが対応して、モダンブラウザではもう安心して使えるよ。デザインシステムやコンポーネントライブラリでは急速に採用が進んでいるんだ。container-type: inline-sizeを指定した要素はレイアウト計算が少し変わるから、既存コードに後付けするときはcontainの挙動を理解しておくと安心だね
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「コンテナクエリ」って出てきたら「親要素のサイズに合わせてスタイルを変えるCSS」と思えばだいたいOK!
📖 おまけ:英語の意味
「Container Queries」 = コンテナ(容器)への問い合わせ
💬 メディアクエリの「メディア」がビューポートを指すのに対し、コンテナクエリの「コンテナ」は親要素を指すよ。CSSの世界で10年以上待ち望まれた機能なんだ
← 用語集にもどる