こんにちは。すずきです。
この記事ではスマホ版のサイトなどでよく見かけるハンバーガーメニューの作り方を解説します。
- ハンバーガーメニューの作り方がわからない。
- ハーバーガーメニューの動作が上手くいかない。
- ハンバーガーメニューをおしゃれに動かしたい。
ハンバーガーボタンの作り方については、以下の記事で解説しています。
完成品のデモ
まずは完成品のデモになります。HTML
とCSS
・jQuery
で実装しています。
右上のハンバーガーボタンをクリックするとメニューが開き、もう一度押すとメニューが閉じます。
See the Pen 【jQuery】ハンバーガーメニュー by すずき (@k-suzuki3533) on CodePen.
具体的な実装方法
jQueryを読み込む
jQuery
を使う際にはCDNを読み込まないと使えません。
以下のコードを<body>
タグの直前に記述することで。jQueryを使うことができます。
<script src="https://code.jquery.com/jquery-3.7.0.min.js" integrity="sha256-2Pmvv0kuTBOenSvLm6bvfBSSHrUJ+3A7x6P5Ebd07/g=" crossorigin="anonymous"></script>
HTMLで構造を記述していく
基本となるHTMLを記述します。<header>
の中にサイトのタイトル、ハンバーガーボタン、ハンバーガーメニューを入れています。
<header class="header">
<div class="header__inner">
<div class="logo">サイトタイトル</div>
<buttom class="drawer__button">
<span></span>
<span></span>
<span></span>
</buttom>
<nav class="drawer__nav">
<div class="drawer__nav__inner">
<ul class="drawer__nav__menu">
<li class="drawer__nav__item">
<a class="drawer__nav__link" href="#">リンク</a>
</li>
<li class="drawer__nav__item">
<a class="drawer__nav__link" href="#">リンク</a>
</li>
<li class="drawer__nav__item">
<a class="drawer__nav__link" href="#">リンク</a>
</li>
<li class="drawer__nav__item">
<a class="drawer__nav__link" href="#">リンク</a>
</li>
<li class="drawer__nav__item">
<a class="drawer__nav__link" href="#">リンク</a>
</li>
</ul>
</div>
</nav>
</div>
</header>
jQueryでclassの付け外しをする
jQuery
ではclassの付け外しのみを行い、見た目の調整はCSS
で行っています。
以下のコードでハンバーガーボタンをクリックした時の動作を行なっています。
ハンバーガーボタンとメニューのclass付け外しを行なっています。
$(function () {
$(".drawer__button").click(function () {
$(this).toggleClass("active");
$(".drawer__nav").toggleClass("active");
});
// function
});
CSSでメニュー開閉時のデザインを記述する
最後にCSS
で開閉時のデザインを調整します。
まずはハンバーガーボタンです。
/* ハンバーガーボタンのデザイン */
.drawer__button {
position: relative;
width: 3rem;
height: 3rem;
background-color: transparent;
border: none;
cursor: pointer;
z-index: 999; /* メニューを開いている時もクリックできるよう設定 */
}
/* ハンバーガーボタン内の線 */
.drawer__button > span {
display: block;
position: absolute;
top: 50%;
left: 50%;
width: 2rem;
height: 2px;
background-color: black;
transform: translateX(-50%);
}
.drawer__button > span:first-child {
transform: translate(-50%, calc(-50% - 0.5rem));
transition: transform 0.3s ease;
}
.drawer__button > span:nth-child(2) {
transform: translate(-50%, -50%);
transition: opacity 0.3s ease;
}
.drawer__button > span:last-child {
transform: translate(-50%, calc(-50% + 0.5rem));
transition: transform 0.3s ease;
}
jQuery
によって.active
のclassが付与された際のデザインを記述します。
/* 展開時のデザイン */
.drawer__button.active > span:first-child {
transform: translate(-50%, -50%) rotate(-45deg);
}
.drawer__button.active > span:nth-child(2) {
opacity: 0;
}
.drawer__button.active > span:last-child {
transform: translate(-50%, -50%) rotate(45deg);
}
次にメニューです。
/* メニューのデザイン */
.drawer__nav {
position: fixed; /* 追従ヘッダーなどでも表示できるよう設定しておく */
top: 0;
left: 0;
width: 100%;
height: 100vh;
background-color: rgba(0, 0, 0, 0.5);
transition: opacity 0.3s ease;
opacity: 0;
visibility: hidden;
}
.drawer__nav__inner {
position: relative;
width: 80%;
height: 100%;
background-color: white;
padding: 4rem 1.5rem 1rem;
margin: 0 0 0 auto;
overflow: scroll;
transform: translateX(100%);
transition: transform 0.3s ease;
}
.drawer__nav__menu {
list-style: none;
padding-left: 0;
}
.drawer__nav__link {
display: block;
color: black;
text-decoration: none;
padding: 1rem 1rem;
border-bottom: solid 1px lightgray;
}
こちらもjQuery
によって.active
のclassが付与された際のデザインを記述します。
/* 展開時のデザイン */
.drawer__nav.active {
opacity: 1;
visibility: visible;
}
.drawer__nav.active .drawer__nav__inner {
transform: translateX(0);
}
CSS
でメニューの開閉時のデザインを記述し、jQuery
のclass付与によって状態を変化させる。というのがシンプルにハンバーガーメニューを実装するポイントです。
まとめ
ハンバーガーメニューの作り方を解説しました。
実装のポイントは以下になります。
jQuery
を使用し、クリック時にclassの付け外しをする。CSS
でそれぞれのデザインを指定する。
ハンバーガーメニューを初めて作るとなると、わからないことが多く戸惑ってしまう方もいると思います。
しかし仕組みは単純で、jQuery
でclassを付与し、CSS
でデザインをそれぞれ記述することで簡単に作ることができます。
ハンバーガーメニューのアニメーションについては、以下の記事で解説しています。
ハンバーガーメニュー実装でつまづいている方の参考になれば幸いです。