【jQuery不要!】シンプルで軽量!JavaScriptだけで作るハンバーガーメニュー
近年、スマホユーザーの増加に伴い、ウェブサイトをモバイルフレンドリーにすることが重要になっています。 その中でも、ハンバーガーメニューは、限られた画面スペースを有効活用できるため、スマホサイトで頻繁に採用されています。 この記事では、jQueryなどの外部ライブラリを使用せず、JavaScriptだけでハンバーガーメニューを実装する方法を解説します。 初心者の方でも分かりやすいよう、コードを細かく解説しながら、シンプルで軽量なハンバーガーメニューの作り方をステップごとにご紹介します。
ハンバーガーメニューとは?
ハンバーガーメニューは、3本線のアイコンをクリックするとナビゲーションメニューが開閉するUIデザインパターンです。 その見た目がハンバーガーに似ていることから、このように呼ばれています。
スマホサイトにおけるメリット
ハンバーガーメニューは、特にスマホサイトにおいて以下のメリットがあります。
- 画面の有効活用: 画面の小さなスマホでは、ハンバーガーメニューを採用することで、ナビゲーションメニューをコンパクトに表示できます。
- スッキリとしたデザイン: ナビゲーションメニューを非表示にすることで、コンテンツ領域を広く使うことができ、スッキリとしたデザインを実現できます。
具体的な使用例
多くのウェブサイト、特に企業サイトやECサイト、ブログなどで広く利用されています。
JavaScriptでハンバーガーメニューを実装する方法
jQueryを使わずに、JavaScriptだけでハンバーガーメニューを実装する方法を、HTML、CSS、JavaScriptに分けて解説します。
HTMLの基本構造
まずは、ハンバーガーメニューを実装するためのHTMLの基本構造を作成します。
<header>
<div class="container">
<h1 class="site-title">サイトタイトル</h1>
<button class="hamburger-menu">
<span></span>
<span></span>
<span></span>
</button>
<nav class="global-nav">
<ul>
<li><a href="#">メニュー1</a></li>
<li><a href="#">メニュー2</a></li>
<li><a href="#">メニュー3</a></li>
</ul>
</nav>
</div>
</header>
.hamburger-menu
: ハンバーガーメニューボタン.global-nav
: グローバルナビゲーションメニュー
CSSの基本設定
次に、ハンバーガーメニューとナビゲーションメニューのスタイルを設定します。
/* ハンバーガーメニューのスタイル */
.hamburger-menu {
display: block;
width: 30px;
height: 30px;
position: relative;
cursor: pointer;
/* ハンバーガーメニューボタンの見た目を整える */
background-color: transparent;
border: none;
padding: 0;
}
.hamburger-menu span {
display: block;
width: 100%;
height: 2px;
background-color: #333;
position: absolute;
transition: all 0.3s ease-in-out;
}
.hamburger-menu span:nth-child(1) {
top: 8px;
}
.hamburger-menu span:nth-child(2) {
top: 15px;
}
.hamburger-menu span:nth-child(3) {
top: 22px;
}
/* ナビゲーションメニューのスタイル */
.global-nav {
display: none; /* 初期状態では非表示にする */
}
.global-nav ul {
list-style: none;
margin: 0;
padding: 0;
}
.global-nav li {
margin: 0;
padding: 0;
}
.global-nav a {
display: block;
padding: 10px 0;
text-decoration: none;
color: #333;
}
/* メディアクエリを使ったレスポンシブ対応 */
@media screen and (min-width: 768px) {
.hamburger-menu {
display: none; /* PCサイズではハンバーガーメニューを非表示にする */
}
.global-nav {
display: block; /* PCサイズではナビゲーションメニューを表示する */
}
}
@media
: メディアクエリを使用することで、画面サイズに応じて表示を切り替えています。
JavaScriptの実装
最後に、ハンバーガーメニューの開閉動作をJavaScriptで実装します。
const hamburgerMenu = document.querySelector('.hamburger-menu');
const globalNav = document.querySelector('.global-nav');
hamburgerMenu.addEventListener('click', () => {
hamburgerMenu.classList.toggle('active'); // ハンバーガーメニューの開閉状態をクラスで制御
globalNav.classList.toggle('active'); // ナビゲーションメニューの開閉状態をクラスで制御
});
addEventListener
: クリックイベントを検知し、メニュー開閉処理を実行します。classList.toggle()
: 要素にクラスがある場合は削除し、ない場合は追加します。
アニメーションを追加して、より使いやすく
CSSのtransition
プロパティを使えば、ハンバーガーメニューの開閉時にアニメーションを追加できます。
/* CSS */
.global-nav {
/* ... */
transition: height 0.3s ease-in-out; /* アニメーションを追加 */
}
JavaScriptを使って、さらに複雑なアニメーションを実装することも可能です。
まとめ|jQueryなしでも簡単に実装できる!
この記事では、jQueryなどの外部ライブラリを使わずに、JavaScriptだけでハンバーガーメニューを実装する方法を紹介しました。 ハンバーガーメニューは、スマホサイトにおいて、ユーザーエクスペリエンスを向上させるための有効なUIです。
今回の実装方法では、JavaScriptのコード量も少なく、初心者の方でも比較的容易に実装できるかと思います。 ぜひ、今回の記事を参考に、ご自身のウェブサイトにもハンバーガーメニューを実装してみてください。
参考文献
- Document.querySelector - Web API | MDN
- EventTarget.addEventListener - Web API | MDN
- Element.classList - Web API | MDN
ハンバーガーメニューに関するQ&A
Q1: ハンバーガーメニューはSEOに影響しますか?
A1: ハンバーガーメニューは、それ自体がSEOに直接影響することはありません。ただし、適切に実装しないと、検索エンジンがサイトの構造を理解しにくくなり、SEOに悪影響を与える可能性があります。ナビゲーションメニューをJavaScriptで後から展開するのではなく、HTML上に記述することで、クローラーが正しく認識できるようになります。また、CSSで初期状態を非表示にする場合は、`:focus-within`などを活用して、キーボード操作時にもナビゲーションメニューが表示されるように配慮しましょう。
Q2: ハンバーガーメニューのクリックエリアが狭くて押しづらいのですが?
A2: ハンバーガーメニューのボタン要素に、CSSで上下左右に余白を設定することで、クリックエリアを広くすることができます。 例えば、以下のCSSを追加すると、クリックエリアを上下左右に10pxずつ広げることができます。
.hamburger-menu {
/* ... */
padding: 10px; /* クリックエリアを広げる */
}
Q3: アニメーションをもっと滑らかにしたい場合は?
A3: CSSの`transition`プロパティを調整することで、アニメーションを滑らかにすることができます。 例えば、`ease-in-out`の値を`cubic-bezier()`関数を使って細かく調整したり、アニメーションの時間を変更したりすることで、より自然な動きを実現できます。
その他の参考記事:ハンバーガー メニュー jquery