公開日:
すごく簡単なjQueryでドロワーメニュー(ハンバーガーメニュー)を作る方法をご紹介します。
jQueryのコードは下の通り。
toggleClassというのは、指定しているクラスが無ければ追加して、既にある場合は削除するものです。
つまり.navbar_toggleをクリックした時に、.navbar_toggleに.openが無ければ追加して、既にあれば削除します。
それと同様に、.menuにも.openが無ければ追加し、あれば削除します。
この切り替え動作だけをjQueryで制御し、あとはCSSで見た目を整えるだけです。
$(function() {
$('.navbar_toggle').on('click', function () {
$(this).toggleClass('open');
$('.menu').toggleClass('open');
});
});
HTMLのコードは下の通り。
.drawerで囲んである部分がハンバーガーメニューアイコンのためのコードです。
.menuで囲んであるのが、ハンバーガーメニューをクリックした時に出てくるドロワーメニューです。
<nav id="drawer_container"> <div class="drawer"> <div class="navbar_toggle"> <span class="navbar_toggle_icon"></span> <span class="navbar_toggle_icon"></span> <span class="navbar_toggle_icon"></span> </div> </div> <div class="menu"> <ul> <li><a href="#">メニュー項目</a></li> <li><a href="#">メニュー項目</a></li> <li><a href="#">メニュー項目</a></li> </ul> </div> </nav>
CSSは下の通り。
1行目から36行目がハンバーガーアイコンの位置や形の指定です。
.navbar_toggle_iconというのがハンバーガーアイコンの横棒で、26行目から36行目でこれに.openがついた時の変化を指定しています。
37行目以降はドロワーメニューが出てきた時の見た目の指定です
今回は透明だったものがふわっと表示されるようなデザインにしてあります。
.drawer {
position: fixed;
right: 20px;
top: 20px;
width: 45px;
z-index: 200;
cursor: pointer;
}
.navbar_toggle_icon {
position: relative;
display: block;
height: 2px;
width: 45px;
background: #333;
transition: ease .5s;
}
.navbar_toggle_icon:nth-child(1) {
top: 0;
}
.navbar_toggle_icon:nth-child(2) {
margin: 8px 0;
}
.navbar_toggle_icon:nth-child(3) {
top: 0;
}
.navbar_toggle.open .navbar_toggle_icon:nth-child(1) {
top: 10px;
transform: rotate(45deg);
}
.navbar_toggle.open .navbar_toggle_icon:nth-child(2) {
opacity: 0;
}
.navbar_toggle.open .navbar_toggle_icon:nth-child(3) {
top: -10px;
transform: rotate(-45deg);
}
.menu {
transition: ease .5s;
z-index: 100;
background: #fff;
width: 100%;
height: 100%;
position: fixed;
top: 0px;
left: 0px;
opacity: 0;
visibility: hidden;
display: flex;
justify-content: center;
align-items: center;
overflow-y: auto;
}
.menu.open {
opacity: 1;
visibility: visible;
}
.menu li {
margin: 25% 0;
font-size: 24px;
line-height: 1.4;
}
.menu li a {
color: #333;
text-decoration: none;
}