水平メニュー(Horizontal Menu)
ヘッダーに配置する水平ナビゲーションメニューの実装を3つのアプローチで比較。 サブメニュー・ドロップダウン・アクティブ状態・テーマ切替・レスポンシブ対応など、実践的な使用例をインタラクティブに確認できます。
💡 ネイティブ実装: nav / ul / li と CSS だけでも、水平ナビゲーションを実装できます。 ナビゲーションメニュー(nav) →
ライブラリ比較
| 項目 | Ant Design | PrimeReact | CSS / Tailwind |
|---|---|---|---|
| 水平メニューコンポーネント | ✅ Menu mode="horizontal" | ✅ Menubar 専用コンポーネント | ⚠️ 自作 |
| サブメニュー(ドロップダウン) | ✅ children でネスト | ✅ items でネスト | ⚠️ hover + absolute で自作 |
| 多階層サブメニュー | ✅ 無制限ネスト | ✅ 無制限ネスト | ⚠️ 自作(手間が大きい) |
| アクティブ状態 | ✅ selectedKeys で制御 | ⚠️ className で自前対応 | ✅ state で自由に制御 |
| テーマ切替 | ✅ theme="light" / "dark" | ✅ テーマCSS切替 | ✅ CSS変数で管理 |
| ロゴ/アクション配置 | ⚠️ Layout.Header と組み合わせ | ✅ start / end スロット | ✅ flex で自由配置 |
| レスポンシブ(ハンバーガー切替) | ❌ 非対応(自作が必要) | ✅ 標準で内蔵 | ⚠️ 自作 |
| アイコン統合 | ✅ @ant-design/icons | ✅ PrimeIcons | ⚠️ 手動で配置 |
| 宣言的API | ✅ items 配列 | ✅ model 配列 | ⚠️ 自作 |
| アクセシビリティ | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA完全対応 | ⚠️ 実装者次第 |
| TypeScript | ✅ 完全サポート | ✅ 完全サポート | ✅ 完全サポート |
| バンドルサイズ追加 | ⚠️ 中 | ⚠️ 中 | ✅ ゼロ追加 |
選択のポイント
- Ant Design— Menu mode="horizontal" は items 配列による宣言的な定義、多階層サブメニュー、light/dark テーマ切替を標準装備。selectedKeys によるアクティブ状態の管理も明快。ただしレスポンシブ時のハンバーガー切替は自前で実装する必要がある。Ant Design ベースのプロジェクトや管理画面のヘッダーナビゲーションに最適。
- PrimeReact — Menubar は水平ナビバーに特化した唯一の専用コンポーネント。start/end スロットでロゴやアクションボタンを柔軟に配置でき、モバイルでのハンバーガー切替も標準で内蔵。WAI-ARIA 対応も最も充実しており、コーポレートサイトやSaaSのヘッダーに向いている。
- CSS / Tailwind CSS — ゼロ依存でバンドルサイズを最小化しつつ、デザインの完全なコントロールが可能。ホバーでのドロップダウンやアクティブ状態のハイライトを flex + absolute で自作。多階層サブメニューは手間がかかるが、シンプルなヘッダーナビゲーションであれば十分実用的。ランディングページやポートフォリオサイトに最適。