コンテナクエリによるレスポンシブナビゲーションバー
CSSコンテナクエリを使用して、コンテナの幅に基づいてフルメニュー、コンパクトメニュー、ハンバーガーアイコンを切り替えるナビゲーションバーを構築します。
Integration Patterns
詳細な説明
コンテナクエリによるレスポンシブナビゲーション
コンテナクエリを使うと、全幅ヘッダー、サイドバー、狭いパネルなど、利用可能なスペースに適応するナビゲーションコンポーネントを構築できます。
CSS
.nav-container {
container: nav / inline-size;
}
/* デフォルト:ハンバーガーメニュー */
.nav-full { display: none; }
.nav-hamburger { display: flex; }
/* 中間:コンパクトラベル */
@container nav (min-width: 500px) {
.nav-full {
display: flex;
gap: 0.5rem;
}
.nav-hamburger { display: none; }
.nav-label { display: none; }
.nav-icon { display: block; }
}
/* 広い:フルラベル */
@container nav (min-width: 800px) {
.nav-label { display: inline; }
}
3つの状態
- 狭い(< 500px):ハンバーガー/メニューボタンのみ表示。狭いパネルに適しています。
- 中間(500-799px):アイコンは表示されますがテキストラベルは非表示。コンパクトですが機能的。
- 広い(800px+):アイコンとラベル付きのフルナビゲーション。
コンテナクエリが優れている理由
ナビゲーションコンポーネントは以下に表示される可能性があります:
- 全幅ヘッダー(ビューポート = 1400px、nav = 1200px)
- サイドバーパネル(ビューポート = 1400px、nav = 250px)
- モバイルレイアウト(ビューポート = 375px、nav = 375px)
メディアクエリでは各コンテキストに異なるブレークポイントが必要ですが、コンテナクエリならnavは受け取るスペースに適応します。
ユースケース
ヘッダー、サイドバー、または埋め込みパネルに表示されるナビゲーションコンポーネントにこのパターンを使用してください。JavaScriptのリサイズオブザーバーなしで、利用可能なスペースに基づいて表示密度が適応します。