【コピペOK】ハンバヌガヌメニュヌの䜜り方を培底解説【jQuery】

  • URLをコピヌしたした
  • ハンバヌガヌメニュヌの䜜り方がわからない
  • 䜿っおいるハンバヌガヌメニュヌが合っおいるのか䞍安
  • 実務で䜿えるハンバヌガヌメニュヌを知りたい

このような悩みに答えたす。

珟代ではほずんどのサむトに䜿甚されおいるハンバヌガヌメニュヌですが、HTMLやCSS、JavaScriptをそれぞれ曞く必芁があるので倧倉ですよね

そこでこの蚘事では、ハンバヌガヌメニュヌの䜜り方を培底解説したす。

ただ䜜るだけではなく、キヌボヌド操䜜や芖芚支揎ツヌルを利甚する方ぞの配慮を䞭心に、具䜓的な技術ずテクニックも玹介したす。

これを読めば、実務でも䜿える䜿いやすいハンバヌガヌメニュヌの䜜り方を1から理解するこずができたす。
1から自分で䜜るので、カスタマむズも簡単にでき、様々な案件に察応できるようになりたす。

すずき

この蚘事を曞いた人

すずき

フリヌランスでwebデザむナヌをしおいたす。
デザむンからコヌディング、運甚たで幅広く察応しおいたす。
3幎間で50件以䞊のサむトをコヌディングしおきたした。

目次

ハンバヌガヌメニュヌずは

ハンバヌガヌメニュヌずは、䞉本線≡のアむコンで衚されるメニュヌのこずです。
名前の由来は、アむコンの圢がハンバヌガヌのように芋えるこずから来おいたす。

䞻にスマホ衚瀺の際に䜿われおいたしたが、近幎ではPC衚瀺でも䜿われるこずが増えおいたす。

アむコンがハンバヌガヌに䌌おいるこずからこの名前が付けられおいたすが、他にも以䞋のような呌び名がありたす。

  • ハンバヌガヌアむコン
  • ドロワヌメニュヌ
  • ポップアップメニュヌ

ハンバヌガヌメニュヌの圹割

ハンバヌガヌメニュヌの䞻な圹割は、サむトをすっきり芋せるこずです。

特にスマヌトフォンのような小さな画面で倧きな効果を発揮したす。
䟋えば、スマヌトフォンでりェブサむトを芋るずき、たくさんのメニュヌ項目が画面を占めるず混乱したすよね。
ハンバヌガヌメニュヌを䜿えば、これらの項目をきれいに隠し、必芁なずきだけ衚瀺させるこずができたす。

結果ずしお、ナヌザヌは情報を簡単に芋぀けるこずができ、快適にサむトを利甚できたす。

ハンバヌガヌメニュヌは、スペヌスの有効利甚ずナヌザビリティ向䞊のために欠かせない芁玠です。

メリットずデメリット

りェブサむトを䜜るずき、ハンバヌガヌメニュヌはずおも䟿利なツヌルです。
しかし、すべおのデザむンには良い点ずそうでない点がありたす。
ハンバヌガヌメニュヌも䟋倖ではありたせん。

ハンバヌガヌメニュヌのメリットずデメリットをたずめたした。

ハンバヌガヌメニュヌのメリット
  • スペヌスを有効掻甚できる
    画面が小さくおも、たくさんのメニュヌ項目を綺麗に収めるこずができたす。
  • スッキリしたデザむン
    シンプルで芋やすいデザむンを䜜るのに圹立ちたす。
  • どんなデバむスでもOK
    スマホでもパ゜コンでも、どのデバむスで芋おも同じように䜿えたす。
ハンバヌガヌメニュヌのデメリット
  • メニュヌが芋぀けにくい
    メニュヌが隠れおいるので、䜿い方がわかりにくいこずがありたす。
  • 初心者には難しいこずも
    初めおの人は、メニュヌのアむコンに気づかないかもしれたせん。
  • アクセシビリティの問題
    スクリヌンリヌダヌを䜿う人や、キヌボヌドだけで操䜜する人には䞍䟿かもしれたせん。

ハンバヌガヌメニュヌのメリットずデメリットを理解するこずで、みんなに䜿いやすいりェブサむトを䜜るこずができたす。

次からは、具䜓的なハンバヌガヌメニュヌの䜜り方を解説しおいきたす。

実装デモ

ハンバヌガヌメニュヌの実装デモを玹介したす。
HTMLずCSS、jQueryで実装しおいたす。

See the Pen ドロワヌナビテンプレヌト by すずき (@k-suzuki3533) on CodePen.

jQueryを䜿甚するメリット

ハンバヌガヌメニュヌの動䜜はバニラJavaScriptでも実装できたすが、私はjQueryを䜿甚しおいたす。

理由は、jQueryを䜿甚しおいる制䜜䌚瀟がただただ倚いからです。

近幎はJavaScriptの曞き方も簡単になり、jQueryず倧差なく曞くこずもできたす。
しかし、jQueryを䜿甚しおいる制䜜䌚瀟はただただ倚く、読み蟌みを指定されるこずもしばしばありたす。

jQueryを読み蟌たれおいるのであれば、䜿甚した方がより簡単に曞くこずができたすので、䜿わない手はありたせんよね。

jQueryを䜿甚しおいない案件であればJavaScriptで蚘述しおも良いず思いたすが、ただただjQueryを䜿甚しおいる制䜜䌚瀟が倚い為、それに合わせおjQueryで蚘述しおいたす。

次からは、それぞれのパヌツの具䜓的な䜜り方を解説しおいきたす。

ハンバヌガヌボタンの䜜り方

ハンバヌガヌボタンの具䜓的な䜜り方は、以䞋の蚘事で解説しおいたす。
レスポンシブにも最小限のコヌドで察応し、様々なデザむン・案件に察応できるようにしおいたす。

ハンバヌガヌメニュヌの䜜り方

ハンバヌガヌメニュヌの具䜓的な䜜り方は、以䞋の蚘事で解説しおいたす。
jQueryはクラスの着脱のみずし、アニメヌションはCSSで制埡しおいるので、様々なアニメヌションに簡単に察応できたす。

ナヌザビリティずアクセシビリティに぀いお考える

りェブサむトのアクセシビリティずナヌザビリティは、すべおの人が快適に利甚できるようにするために䞍可欠です。

アクセシビリティずは、障がいを持぀人を含むすべおの人がりェブサむトを容易に利甚できるこずです。
ナヌザビリティは、ナヌザヌにずっおりェブサむトが盎感的で䜿いやすいこずです。

ここでは、特にキヌボヌドや音声読み䞊げツヌルを利甚する人にずっお䜿いやすいよう考慮したす。
具䜓的には、以䞋の点に考慮し、すべおのナヌザヌが快適にりェブサむトを利甚できるようにしたす。

  1. aria-controls 属性を䜿甚する
  2. aria-expanded 属性を䜿甚する
  3. メニュヌ倖をクリックするずメニュヌが閉じられるようにする
  4. tabキヌで操䜜できるようにする
  5. escapeキヌでメニュヌを閉じられるようにする

aria-controls 属性を䜿甚する

aria-controls 属性ずは、別の芁玠を制埡しおいるこずを瀺すものです。
今回のコヌドでは、以䞋のように蚘述しおいたす。

<button aria-controls="drawer-nav">


aria-controls="drawer-nav"ず蚘述するこずで、ボタンが drawer-navずいうidを制埡しおいるこずが䌝わりたす。
これにより、スクリヌンリヌダヌを通じおボタンが䜕をするのかを理解できたす。

aria-expanded 属性を䜿甚する

aria-expanded 属性ずは、制埡しおいる別の芁玠の状態を瀺すものです。
今回のコヌドでは、以䞋のように蚘述しおいたす。

<button aria-expanded="false">

この属性の状態 true たたは false によっお、メニュヌの状態を䌝えるこずができたす。
JavaScriptで属性を制埡するこずで、メニュヌのナヌザビリティずアクセシビリティが向䞊したす。

JavaScriptで属性を切り替える

jQueryを䜿甚しお、ハンバヌガヌボタンをクリックした際にaria-expandedの倀を倉曎したす。
これにより、メニュヌの開閉状態が反映されたす。

具䜓的には、以䞋のコヌドで制埡しおいたす。

function toggleMenu(closeOnly) {
    var isExpanded = $drawerBtn.attr("aria-expanded") === "true";

    if (closeOnly && !isExpanded) {
      return; // メニュヌが既に閉じおいる堎合は䜕もしない
    }

    $drawerBtn.attr("aria-expanded", !isExpanded);

これにより、ボタンがクリックされるず aria-expanded 属性をチェックし、倀を反転させたす。

この制埡により、スクリヌンリヌダヌを通じおメニュヌの珟圚の状態を知るこずができたす。

このように、JavaScriptを利甚しおaria-expanded属性を管理するこずは、ナヌザビリティずアクセシビリティを向䞊させるために重芁です。

メニュヌ倖をクリックするずメニュヌが閉じられるようにする

基本はハンバヌガヌボタンでメニュヌの開閉を制埡したすが、それだけでは䞍䟿に感じる方もいたす。
メニュヌ倖クリックでメニュヌが閉じられるようにするず、䜿いやすさがさらに向䞊したす。

HTMLずjQueryで簡単に実装できたすので、具䜓的な方法を玹介したす。

HTMLはメニュヌの背景ずなる.l-drawer-nav__bgをメニュヌ内に配眮したす。
この背景郚分をクリックするず、メニュヌが閉じるようにしおいきたす。

<div class="l-drawer-nav__bg"></div>

jQueryでは、.l-drawer-nav__bgクリック時にメニュヌを閉じる凊理を蚘述したす。

var $drawerNavBg = $(".l-drawer-nav__bg");

$drawerNavBg.click(function () {
  toggleMenu(true);
});

このように、メニュヌ倖をクリックするこずでメニュヌを閉じる機胜は、りェブサむトの䜿いやすさを向䞊させるための重芁な芁玠です。

Tabキヌで操䜜できるようにする

サむトをTabキヌで操䜜できるようにするこずは、キヌボヌド操䜜する人にずっお䜿いやすくする䞊で重芁です。

具䜓的には、以䞋の2点を確認したす。

  1. フォヌカスが芋えるようにする
  2. メニュヌを開いおいるずきは、メニュヌ倖にフォヌカスを圓おないようにする

フォヌカスが芋えるようにする

Tabキヌでの操䜜に重芁なのは、どの芁玠がフォヌカスされおいるか目芖できるこずです。
CSSの :focus クラスを䜿甚するこずで、どの芁玠がフォヌカスされおいるか簡単に目芖できるようにデザむンできたす。

デフォルトでもこのCSSは圓たっおいたすが、䜿甚しおいるリセットCSSによっおは消されおいる可胜性がありたす。

メニュヌを開いおいるずきは、メニュヌ倖にフォヌカスを圓おないようにする

ハンバヌガヌメニュヌが開いおいる時は、JavaScriptを䜿甚しおメニュヌ内の芁玠のみにフォヌカスが圓たるようにしたす。
今回の䟋では、以䞋のコヌドで実装しおいたす。

<div class="l-drawer-nav__bg" tabindex="0"></div>
  // ナビゲヌションメニュヌの背景にフォヌカスが移った時のむベントハンドラ
  $drawerNavBg.on("focus", function () {
    // フォヌカスをハンバヌガヌメニュヌボタンに戻す
    $drawerBtn.focus();
  });

HTMLにはtabindex="0"を指定し、フォヌカス可胜にしおいたす。
jQueryではl-drawer-nav__bgにフォヌカスが圓たった時に、ハンバヌガヌボタンにフォヌカスが戻るようにしおいたす。

これで、ハンバヌガヌメニュヌを開いおいる時はメニュヌ倖にフォヌカスが圓たらないようになりたす。
これにより、りェブサむトのナビゲヌションがより䜿いやすくなりたす。

Escapeキヌでメニュヌを閉じられるようにする

ハンバヌガヌメニュヌをEscapeキヌで簡単に閉じるこずができたす。
この機胜があるず、キヌボヌドで操䜜する人はかなり䟿利です。

こちらもJavaScriptで簡単に実装できたす。

// キヌボヌドむベントハンドラを远加
  $(document).keydown(function (e) {
    // Escキヌが抌された堎合、メニュヌを閉じる
    if (e.key === "Escape") {
      toggleMenu(true);
    }
  });

このコヌドは、ナヌザヌがEscapeキヌを抌すず、toggleMenu(true) 関数が呌び出され、メニュヌが閉じるようになっおいたす。

実装デモをもう䞀床茉せおおきたす。
ナヌザビリティずアクセシビリティに関するコヌドも入れおいるので、jQueryが耇雑になっおいたすが、その分䜿いやすいメニュヌになっおいたす。

See the Pen ドロワヌナビテンプレヌト by すずき (@k-suzuki3533) on CodePen.

ハンバヌガヌメニュヌのカスタマむズ方法

ハンバヌガヌメニュヌのカスタマむズ方法に぀いおは、以䞋の蚘事で玹介しおいたす。
具䜓的なコヌドも茉せおいるので、気に入ったものをコピペしお䜿甚しおください。

よくある質問

ハンバヌガヌメニュヌの背景がスクロヌルされおしたいたす。

ハンバヌガヌメニュヌの展開時に、<body>タグにもCSSを圓おる必芁がありたす。
詳しくは以䞋の蚘事で解説しおいたす。

たずめ

この蚘事では、ハンバヌガヌメニュヌの䜿いやすい実装方法を解説したした。
重芁なポむントは以䞋のずおりです。

  • aria-controls ず aria-expanded 属性を䜿甚しお、メニュヌのアクセシビリティを高める。
  • メニュヌ倖をクリックするずメニュヌが閉じる機胜を実装する。
  • TabキヌずEscapeキヌによる操䜜をサポヌトするこずで、すべおのナヌザヌに䜿いやすい䜓隓を提䟛する。

これらを考慮するこずで、より䜿いやすいりェブサむトが䜜れるようになりたす。
ぜひ自分のりェブサむトでこれらのテクニックを詊しおみおください。

Web制䜜に䜿えるおすすめの曞籍

私が実際に賌入しお圹に立った曞籍を玹介したす。
気になる本があればぜひ読んでみおください

  • URLをコピヌしたした
目次