Container Queries
メディアクエリはビューポート幅を基準とするため、同じコンポーネントをサイドバーとメインカラムの両方で使う場合に対応できなかった。Container Queries はコンポーネント自身の親サイズを基準にできる。
概要
メディアクエリはビューポート幅を基準とするため、同じコンポーネントをサイドバーとメインカラムの両方で使う場合に対応できなかった。Container Queries はコンポーネント自身の親サイズを基準にできる。
対応ブラウザ
デスクトップ
Chrome 105+
Edge 105+
Safari 16+
Firefox 110+
モバイル
Chrome Android 105+
Safari iOS 16+
Firefox Android 110+
基本構文
CSS
.card-wrapper {
container-type: inline-size;
container-name: card;
}
@container card (min-width: 400px) {
.card {
display: flex;
gap: 1rem;
}
} 実務での使いどころ
-
再利用可能なカードコンポーネント
サイドバーでは縦積み、メインエリアでは横並びと、置かれた場所に応じてレイアウトが変わる真の意味での再利用可能コンポーネント。
-
ウィジェットの自律的なレスポンシブ
ダッシュボードのウィジェットが自分のコンテナ幅に応じてレイアウトを切り替える。
注意点
- container-type を指定した要素自身はコンテナクエリの対象にならない。子要素のスタイルにのみ適用できる。
- 容量の大きいレイアウト変更を多用すると再描画コストが増える可能性がある。
フォールバック戦略
CSS
@supports not (container-type: inline-size) {
@media (min-width: 400px) {
.card { display: flex; }
}
} アクセシビリティ
- レイアウト変更によって読み上げ順が変わらないよう、HTML の DOM 順序はそのままに CSS で視覚的な並びを制御する。