コンテナクエリとメディアクエリの違い
コンポーネントベースの設計で、コンテナクエリとビューポートのメディアクエリをいつ使い分けるかを理解します。
「コンテナクエリとメディアクエリの違い」はCoddyKit上の無料CSS Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCSS Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 CSS Academyコースには全4レッスンが含まれています。
根本的な違い
メディアクエリはビューポートの寸法に応答します。一方、コンテナクエリは親コンテナの寸法に応答します。この違いによって、どの問題にどのツールを使うべきかが決まります。
メディアクエリを使う場面
次の用途にはメディアクエリを使用します。
- ページ全体のレイアウト変更(1列と2列の切り替えなど)
- ページの大きなセクションの表示・非表示(モバイルでのナビゲーションドロワーなど)
- ページ全体のタイポグラフィ基準サイズの調整
- 印刷用スタイル
- ユーザー設定のクエリ(ダークモード、モーションの軽減など)
コンテナクエリを使う場面
次の用途にはコンテナクエリを使用します。
- コンポーネント単位のレイアウト変更(カードの横並びと縦積みの切り替えなど)
- サイズが不明なコンテナに配置されるコンポーネント(サイドバー、メイン領域、メイン領域内のサイドバーなど)
- 再利用可能なデザインシステムのコンポーネント
- 第三者のページに埋め込むウィジェット
ポータビリティの利点
メディアクエリでスタイルを設定したカードは、幅1200pxのページでは1つのブレークポイントで機能します。しかし、そのカードをサイドバーに移動すると、別のブレークポイントが必要になる場合があります。コンテナクエリなら、同じカードが利用可能な空間に合わせて適応するため、そのまま機能します。
組み合わせて使う
実際のアプリケーションでは、両方を使用します。メディアクエリでマクロなレイアウト(デスクトップ幅ではサイドバーを表示するなど)を定義し、コンテナクエリでそのレイアウト内におけるコンポーネントの動作を定義します。
<div class="layout">
<div class="sidebar"><div class="card">Sidebar card</div></div>
<div class="main-content"><div class="card">Main card</div></div>
</div>
コンテナクエリの詳細度
詳細度を追加しないメディアクエリとは異なり、コンテナクエリはコンテキスト固有の詳細度を追加します。@container (min-width: 400px)内のルールは、外側にある同じルールと同じ詳細度を持ちますが、そのコンテナコンテキスト内でのみ適用されます。
ブラウザーの対応状況
コンテナクエリは、2023年以降のすべての最新ブラウザー(Chrome 105以降、Firefox 110以降、Safari 16以降)でサポートされています。最新ブラウザーを対象とする新規プロジェクトでは、フォールバックなしで安全に使用できます。
@supportsによる段階的な機能強化
古いブラウザーへの対応が必要なプロジェクトでは、@supportsを使ってコンテナクエリの対応状況を確認します。
<div class="card-wrapper"><div class="card">Progressively enhanced card</div></div>
パフォーマンスの比較
コンテナクエリには固有のパフォーマンス特性があります。container-typeを持つ各要素が、レイアウトの包含境界を作成します。これにより、内部のサイズ変更が外側に影響するのを防げます。これは実際にはパフォーマンス上の利点です。メディアクエリによる変更では、ページ全体のレイアウト再計算が発生する場合があります。
コンテナクエリのデバッグ
Chrome DevToolsでは、Elementsパネルのコンテナ要素の横に「cq」バッジが表示されます。これをクリックすると、コンテナの境界を可視化し、DevToolsのレイアウトインスペクターでコンテナクエリの条件をテストできます。
理解度チェック
デザインシステムのカードコンポーネントを、どのコンテキストでも利用可能な幅に応じて、縦積みレイアウトと横並びレイアウトの間で切り替える必要があります。どの方法が適していますか。
まとめ
メディアクエリはグローバルなビューポートに応答し、コンテナクエリは親コンテナのサイズに応答します。グローバルなレイアウトの決定やユーザー設定のクエリにはメディアクエリを使用します。コンテキストに合わせて適応する必要がある再利用可能なコンポーネントには、コンテナクエリを使用します。両方を組み合わせ、ページ全体のマクロなレイアウトにはメディアクエリ、そのレイアウト内でのコンポーネント単位の適応にはコンテナクエリを使います。
よくある質問
「コンテナクエリとメディアクエリの違い」レッスンは無料ですか?
はい。「コンテナクエリとメディアクエリの違い」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、CSS Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 CSS Academyコースには全4レッスンが含まれています。
「コンテナクエリとメディアクエリの違い」で何を学びますか?
コンポーネントベースの設計で、コンテナクエリとビューポートのメディアクエリをいつ使い分けるかを理解します。 ブラウザで直接実行するハンズオンコードでCSS Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
CSS Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCSS Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「コンテナクエリとメディアクエリの違い」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCSS Academyレッスンでコードを書いて実行できますか?
はい。すべてのCSS Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- container-typeとcontainer-name
- @containerルールとブレークポイント
- コンテナクエリ単位: cqw cqh
- コンテナクエリとメディアクエリの違い