ハンバーガーメニュー Hamburger Menu

三本線アイコンでメニューの開閉を制御する。モバイルで頻出。

使用場面: 画面幅が狭くナビ項目が多い場合 採用例: YouTube, Airbnb

ライブデモ

ソースコード

<div class="demo-hamburger">
  <button class="demo-hamburger-btn" aria-label="メニューを開く" aria-expanded="false">
    <span class="demo-hamburger-line"></span>
    <span class="demo-hamburger-line"></span>
    <span class="demo-hamburger-line"></span>
  </button>
  <nav class="demo-hamburger-nav" aria-hidden="true">
    <a href="#" class="demo-hamburger-link">ホーム</a>
    <a href="#" class="demo-hamburger-link">サービス</a>
    <a href="#" class="demo-hamburger-link">料金</a>
    <a href="#" class="demo-hamburger-link">お問い合わせ</a>
  </nav>
</div>
.demo-hamburger { position: relative; }
.demo-hamburger-btn {
  display: flex; flex-direction: column; gap: 5px;
  background: none; border: none; cursor: pointer; padding: 10px;
}
.demo-hamburger-line {
  display: block; width: 28px; height: 3px;
  background: var(--ui-primary); border-radius: 2px;
  transition: transform 0.3s, opacity 0.3s;
}
.demo-hamburger-btn.active .demo-hamburger-line:nth-child(1) {
  transform: translateY(8px) rotate(45deg);
}
.demo-hamburger-btn.active .demo-hamburger-line:nth-child(2) {
  opacity: 0;
}
.demo-hamburger-btn.active .demo-hamburger-line:nth-child(3) {
  transform: translateY(-8px) rotate(-45deg);
}
.demo-hamburger-nav {
  display: none; flex-direction: column; gap: 4px;
  margin-top: 12px; padding: 12px; border-radius: 8px;
  background: color-mix(in srgb, var(--ui-primary) 8%, #fff);
  border: 1px solid color-mix(in srgb, var(--ui-primary) 20%, transparent);
}
.demo-hamburger-nav.open { display: flex; }
.demo-hamburger-link {
  padding: 8px 12px; text-decoration: none; color: #333;
  border-radius: 6px; transition: background 0.2s;
}
.demo-hamburger-link:hover {
  background: color-mix(in srgb, var(--ui-primary) 15%, transparent);
  color: var(--ui-primary);
}
document.querySelector('.demo-hamburger-btn').addEventListener('click', function() {
  this.classList.toggle('active');
  const nav = document.querySelector('.demo-hamburger-nav');
  const isOpen = nav.classList.toggle('open');
  this.setAttribute('aria-expanded', isOpen);
  nav.setAttribute('aria-hidden', !isOpen);
});

AIプロンプト

Basic
ハンバーガーメニューをHTML/CSSで作ってください。三本線のアイコンをクリックするとナビゲーションメニューが開閉します。
Custom
以下の仕様でハンバーガーメニューを実装してください。
- アニメーション付きのアイコン変形(三本線 → ×)
- メニュー展開時はスライドイン(左から右へ)
- メニュー背景にオーバーレイ表示
- プライマリカラー: #2563eb
- メニュー項目にホバーエフェクト
- 閉じるときはフェードアウト
Advanced
アクセシビリティ対応のハンバーガーメニューを実装してください。
- aria-expanded, aria-controls, aria-hidden を適切に設定
- フォーカストラップ(メニュー内でTabキーが循環)
- ESCキーでメニューを閉じる
- prefers-reduced-motion対応(アニメーション無効化)
- スクリーンリーダー対応のラベル
- メニュー展開時はbodyスクロールをロック
- タッチデバイスでのスワイプ操作対応