コンテナクエリ対応 自己レスポンシブカード

レイアウト Medium #css #container-query #responsive #modern

@container クエリで「親の幅」に応じてレイアウトが切り替わるカード。メディアクエリと異なり、コンポーネント単位で再利用可能な真のレスポンシブ実装。

▶ プレビュー

解説

コンテナクエリ対応 自己レスポンシブカードは、レイアウトカテゴリの「container-query」に分類される実装パターンです。CSS のみで構成され、難易度は中級レベル。

2023 年に主要ブラウザでサポートされた Container Query(コンテナクエリ)を使った実装です。メディアクエリは「ビューポート(画面)の幅」に応じてスタイルを変えますが、コンテナクエリは「親要素の幅」に応じてスタイルを変えます。

これにより、同じカードコンポーネントを「サイドバー(狭い)」「メインカラム(広い)」のどちらに置いても、それぞれ最適なレイアウトに自動切り替えできます。再利用可能なコンポーネント設計に革命的な改善をもたらす機能です。

仕組み

下記コードタブから HTML / CSS をそれぞれ確認・コピーできます。プレビュー領域では実際の動作をその場で確認可能です。

CSS プロパティだけで完結しているため、フレームワーク非依存・軽量に組み込めます。React / Vue / Astro / 静的 HTML どれにも持ち込み可能です。

レスポンシブ対応済み。スマートフォン・タブレット・PC それぞれの画面幅で適切に表示されます。

注意点 / カスタマイズ時のポイント

親要素に container-type: inline-size; を必ず指定してください。これがないと @container ルールが効きません。

Chrome / Safari / Firefox / Edge すべて対応済み(2023 年〜)。IE 11 は非対応。古い案件用には @supports (container-type: inline-size) でフォールバックを書くとよいでしょう。

よくある質問

メディアクエリと併用できますか?
はい、併用可能です。「画面幅に応じて全体レイアウト」+「親幅に応じてカード内部」のように使い分けると柔軟な設計ができます。
container-name を指定する必要は?
1 つのコンテナクエリしか使わない場合は不要です。複数のコンテナを使い分ける場合は container-name: card; + @container card (min-width: 480px) のように名前付きで使い分けます。
このスニペットは商用利用できますか?
はい。moatway がオリジナルで制作したスニペットは商用・個人問わず自由にご利用いただけます。クレジット表記も不要です。
そのまま貼り付ければ動きますか?
はい。HTML / CSS / JS タブのコードをそれぞれ自分のファイルにコピーして貼り付ければ動きます。クラス名が他の CSS と衝突しないよう、必要に応じてリネームしてください。
ブラウザ対応は?
最新 2 世代の Chrome / Safari / Firefox / Edge で動作確認しています。Internet Explorer はサポート対象外です。
Tailwind CSS でも実装できますか?
可能です。クラスベースのスタイルを Tailwind のユーティリティクラスに置き換えれば同じ動作になります。アニメーション・疑似要素については @apply や arbitrary values が必要な場合があります。
inspired by 2026 modern CSS / Web APIs / 追加日:2026-05-13
← すべてのスニペットへ戻る