2024.09.19

ブログ

【決定版】ハンバーガーメニューの作り方

【決定版】ハンバーガーメニューの作り方

ハンバーガーメニューは、現在多くのウェブサイトで使われている一般的なナビゲーションパターンです。しかし、その実装には多くの注意点があり、単に見た目を再現するだけでは不十分です。アクセシビリティやユーザーエクスペリエンスを考慮した実装が求められます。ここでは、ハンバーガーメニューの効果的な実装方法を紹介します。

まずは完成形をご覧ください。

See the Pen Untitled by maeda (@opcuo) on CodePen.

1. メニューボタンの実装方法

まず、メニューボタンはbutton要素で作成します。これにより、キーボードでの操作が可能になり、スクリーンリーダーでも正しく読み上げられます。以下のWAI-ARIA属性を使用してアクセシビリティを向上させます。

aria-expanded : メニューの開閉状態を示します。
aria-controls : このボタンが制御するメニューのIDを示します。

JavaScriptでボタンが押されたときにクラスを追加し、aria-expanded属性を更新してメニューの開閉を制御します。

2. メニュー展開時の背景固定

メニューが展開されたときに背景(メインコンテンツ)がスクロールしないようにすることが重要です。背景がスクロールするとユーザー体験が損なわれるため、以下の方法で背景を固定します。

position: fixed; height: 100vh; を使って背景を固定します。
スクロール位置を保存し、メニューを閉じたときに元の位置に戻すようにします。
これにより、メニューが展開されている間、背景が固定され、ユーザーが誤ってスクロールしてしまうことを防ぎます。

3. 非表示時のメニューフォーカス制御

メニューが閉じているときは、その中身にフォーカスが当たらないようにします。これにはCSSのvisibility: hidden;を使用します。メニューが開いたときにはJavaScriptでvisibilityをvisibleに変更します。

4. アコーディオンメニューのフォーカス管理

アコーディオンメニューについても、閉じているときにフォーカスが当たらないようにします。これは先ほどのメニューと同様に、visibility: hidden;で制御し、開いたときにはvisibilityをvisibleに変更します。

5. アコーディオンボタンの実装

アコーディオンメニューのボタンもbutton要素を使用し、aria-expandedなどのWAI-ARIA属性を追加します。これにより、アクセシビリティを高めることができます。

6. エスケープキーでメニューを閉じる

ユーザーがエスケープキーを使ってメニューを閉じることができるようにします。これは直感的で使いやすい操作方法です。JavaScriptでevent.keyを使用してエスケープキーを検出し、メニューを閉じます。このとき、メニューが閉じた後にメニューボタンにフォーカスを戻すことも重要です。

7. キーボードフォーカスの循環

メニュー内の項目をキーボードで操作する際、最後の項目までフォーカスが移動したら、メニューボタンまたはメニューの最初の項目にフォーカスを戻すようにします。これを実現するために、フォーカストラップを使用します。

  1. <div id="js-focus-trap" tabindex="0"></div>

この要素にフォーカスが当たったときに、JavaScriptでメニューボタンまたは最初の項目にフォーカスを移します。

まとめ

ここで紹介したハンバーガーメニューの実装方法は、ユーザーの利便性とアクセシビリティを重視したものです。他にもさまざまなアプローチがありますので、ぜひ自分のプロジェクトに最適な方法を見つけてください。

無料相談・お問い合わせ

まずはお気軽にご相談ください。
DESIGN STUDIO MAEDAでは無料相談を実施しています。