ハンバーガーメニュー(Hamburger Menu)
モバイル画面でナビゲーションを折りたたむハンバーガーメニューUIの実装を3つのアプローチで比較。 アイコンのアニメーション・Drawer連携・レスポンシブ対応など、実践的な使用例をインタラクティブに確認できます。
Mantine Burger
Mantineが提供するハンバーガーアイコン専用コンポーネント。AppShellと連携し、breakpointに応じてNavbarの表示/非表示を自動制御。opened状態でハンバーガー ↔ ✕ にアニメーション遷移。
5サイズアイコンアニメーションAppShell統合breakpoint制御アクセシビリティ内蔵
読み込み中...
tsx
'use client';
import { MantineProvider, Burger } from '@mantine/core';
import { useState } from 'react';
import '@mantine/core/styles.css';
const navLinks = ['ホーム', 'について', 'サービス', 'お問い合わせ'];
export function MantineBurgerDemo() {
const [opened, setOpened] = useState(false);
return (
<MantineProvider>
<header className="flex items-center gap-3 px-4 h-14 border-b border-gray-200 bg-white">
<Burger opened={opened} onClick={() => setOpened(!opened)} size="sm" aria-label="メニューを開く" />
<span className="font-bold">MyApp</span>
</header>
{opened && (
<nav className="border-b border-gray-200 bg-slate-50">
{navLinks.map((link) => (
<a key={link} href="#" className="block px-4 py-3 text-sm hover:bg-slate-100 border-b border-gray-100 last:border-0">
{link}
</a>
))}
</nav>
)}
</MantineProvider>
);
}🤖 AIプロンプトテンプレート
React + Tailwind CSSで、Mantineを使ったハンバーガーメニューUIを実装してください。 - 使用ライブラリ: @mantine/core の Burger, AppShell コンポーネント + @mantine/hooks の useDisclosure - AppShell.Header に Burger を配置し、AppShell.Navbar の開閉を制御 - Burger の hiddenFrom="sm" でモバイルのみ表示 - サイズ: sm(size prop で変更可能) - Navbar 内にナビゲーションリンクを配置 - opened 状態でアイコンがハンバーガー ↔ ✕ にアニメーション遷移 - アクセシビリティ: aria-label="Toggle navigation" を設定
⚠️ このプロンプトはあくまでたたき台です。AIの回答はモデルやバージョン、会話の文脈によって毎回異なります。意図通りに動かない場合は、条件を追記・修正してお使いください。
ライブラリ比較
| 項目 | Mantine | Ant Design | CSS / Tailwind |
|---|---|---|---|
| ハンバーガーコンポーネント | ✅ Burger 専用コンポーネント | ⚠️ なし(MenuOutlined で代替) | ⚠️ 自作 |
| アイコンアニメーション | ✅ ハンバーガー ↔ ✕ 自動遷移 | ❌ 静的アイコン | ✅ CSS transition で自作 |
| サイドパネル連携 | ✅ AppShell.Navbar で統合 | ✅ Drawer コンポーネント | ⚠️ fixed + transform で自作 |
| サイズバリエーション | ✅ xs〜xl(5段階) | ⚠️ アイコンサイズのみ変更可 | ✅ 自由に設定可能 |
| レスポンシブ制御 | ✅ hiddenFrom / visibleFrom | ⚠️ CSS で自前対応 | ✅ Tailwind md:hidden 等 |
| サブメニュー対応 | ⚠️ NavLink で実装 | ✅ Menu の SubMenu で対応 | ⚠️ 自作(手間が大きい) |
| テーマ連携 | ✅ MantineProvider | ✅ ConfigProvider | ✅ CSS変数で管理 |
| アクセシビリティ | ✅ WAI-ARIA準拠 | ✅ WAI-ARIA準拠 | ⚠️ 実装者次第 |
| TypeScript | ✅ 完全サポート | ✅ 完全サポート | ✅ 完全サポート |
| バンドルサイズ追加 | ⚠️ 中(AppShell含む) | ⚠️ 中(Drawer + Menu) | ✅ ゼロ追加 |
選択のポイント
- Mantine — AppShell と Burger が統合されており、レスポンシブなモバイルナビゲーションを最短で実装できる。breakpoint 制御、サイズバリエーション、アイコンアニメーションが標準装備。Mantine ベースのプロジェクトなら第一選択。
- Ant Design — Drawer + Menu の組み合わせで、サブメニュー・アイコン付きリンク・テーマ切替など、多機能なサイドメニューを構築しやすい。管理画面やダッシュボードとの相性が良い。ハンバーガーアイコンのアニメーションは別途実装が必要。
- CSS / Tailwind CSS — 外部ライブラリへの依存をゼロにしたい、バンドルサイズを最小化したい場合に最適。アニメーションやアクセシビリティは自前で実装する分、完全にカスタマイズ可能。小規模サイトやランディングページに向いている。