神奈川県伊勢原市在住のkusuのサイトです!ホームページ制作のご依頼等承っております!

【jQuery】横からヌルヌル出てくるドロワーメニューを設置するには?

2020.04.17
jQuery

 スマホサイトでは、以下の見本ページのように横からヌルヌルとメニューが出てくる場合があります。
見本ページ

そこで今回は左横からヌルヌルとメニューが出てくるようにするのをベースにCSSやjQueryの設置方法を説明したいと思います!

記述すべきHTMLコード

 まずドロワーメニューを表示させるために必要なHTMLコードは以下になります。

<a class="menu-btn">
	<span></span>
	<span></span>
	<span></span>
</a>

<div class="drawer-nav">
	<ul>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
	</ul>
</div>

<div class="drawer-overlay"></div>

上記コードの1〜4行目にある

<a class="menu-btn">
	<span></span>
	<span></span>
	<span></span>
</a>

がハンバーガーボタン(メニューボタン)のHTMLになり、7〜17行目の

<div class="drawer-nav">
	<ul>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
		<li><a href="">メニュー</a></li>
	</ul>
</div>

<div class="drawer-overlay"></div>

がドロワーメニュー本体のHTMLになります。

設定すべきCSS

 続いて、設定すべきCSSについて解説してきます。

今回は

  • ハンバーガーボタンはシンプルに3本線のもの
  • ドロワーメニュー本体は背景が白色で、横幅200pxのもの

というデザインで表示させるため、以下のCSSを設定しました。

.menu-btn,
.menu-btn span {
	box-sizing: border-box;
	display: inline-block;
	transition: all .4s;
}

.menu-btn {
	cursor: pointer;
	display: block;
	height: 36px;
	margin: 20px 0 0 20px;
	position: relative;
	width: 40px;
}

.menu-btn span {
	background: #000;
	box-sizing: border-box;
	left: 0;
	height: 4px;
	position: absolute;
	width: 100%;
}

.menu-btn span:nth-of-type(1) {
	top: 0;
}

.menu-btn span:nth-of-type(2) {
	top: 16px;
}

.menu-btn span:nth-of-type(3) {
	bottom: 0;
}

body.open {
	overflow: hidden;
}

.drawer-overlay {
	background: rgba(0,0,0,0.6);
	box-sizing: border-box;
	display: none;
	height: 100%;
	position: fixed;
	top: 0;
	width: 100%;
	z-index: 9998;
}

.drawer-overlay.open {
	display: block;
}

.drawer-nav {
	background: #fff;
	box-sizing: border-box;
	left: -200px;
	height: 100%;
	overflow-y: scroll;
	position: fixed;
	top: 0;
	transition: all .5s;
	width: 200px;
	z-index: 9999;
}

.drawer-nav.open {
	left: 0;
	transform: translateZ(0);
}

.drawer-nav ul {
	box-sizing: border-box;
}

.drawer-nav ul li {
	box-sizing: border-box;
	border-bottom: 1px solid #000;
}

.drawer-nav ul li a {
	box-sizing: border-box;
	color: #000;
	display: block;
	font-size: 18px;
	line-height: 28px;
	padding: 5px 10px;
	text-decoration: none;
}

ハンバーガーボタンのCSSは上記見本コードの1〜36行目で設定していますが、今回はドロワーメニューが本題なため、詳しい解説については割愛させていただきます(汗)。

メニュー部分をスクロールした時にページ全体がスクロールしないようにする

 まずメニュー展開時に、メニュー部分をスクロールした時にページ全体がスクロールしないようにすると挙動的にも安定するかと思います。

そのため、これは必ずCSSを設定しなきゃダメ…という訳ではないのですが、できれば

body.open {
	overflow: hidden;
}

上のCSSを設定しておくと良いかな?と思います。

このCSSを設定することで、bodyにclass=”open”が追記された時にページ全体がスクロールできないようにさせることができます!

黒の半透明の要素の設定

 見本ページにおいて、ドロワーメニューを開くとメニューの横に黒の半透明な要素が出てきています。

後ほど解説しますが、jQueryにてこの黒の半透明の要素をクリック(タップ)するとドロワーメニューが閉じるような設定にしますので、もしこの黒の半透明の要素を透明にしたい場合は

.drawer-overlay {
	background: rgba(0,0,0,0);
	box-sizing: border-box;
	display: none;
	height: 100%;
	position: fixed;
	top: 0;
	width: 100%;
	z-index: 9998;
}

の2行目みたいに透過度を0にすることで要素を透明にすることができます!

ちなみにデフォルトではdisplay: none;にて非表示にしており、.openが追加されることで

.drawer-overlay.open {
	display: block;
}

上記のように表示されるよ設定しています。

メニュー本体のCSS

 続いてメニュー本体のCSSは上記見本コードの53〜88行目にある

.drawer-nav {
	background: #fff;
	box-sizing: border-box;
	left: -200px;
	height: 100%;
	overflow-y: scroll;
	position: fixed;
	top: 0;
	transition: all .5s;
	width: 200px;
	z-index: 9999;
}

.drawer-nav.open {
	left: 0;
	transform: translateZ(0);
}

.drawer-nav ul {
	box-sizing: border-box;
}

.drawer-nav ul li {
	box-sizing: border-box;
	border-bottom: 1px solid #000;
}

.drawer-nav ul li a {
	box-sizing: border-box;
	color: #000;
	display: block;
	font-size: 18px;
	line-height: 28px;
	padding: 5px 10px;
	text-decoration: none;
}

にて設定しています。

メニューの背景を白、そして横幅を200pxに…というのを

.drawer-nav {
	background: #fff;
	box-sizing: border-box;
	left: -200px;
	height: 100%;
	overflow-y: scroll;
	position: fixed;
	top: 0;
	transition: all .5s;
	width: 200px;
	z-index: 9999;
}

にて設定していますが、上記コードの4行目にある

left: -200px;

で横幅分左側に隠れるようにしています。

そのため、横幅のサイズを変更したい場合は
width: ○○○px;
および
left: -○○○px;
のサイズを同じにして設定しましょう!

また、.openが追加された

.drawer-nav.open {
	left: 0;
	transform: translateZ(0);
}

で左側からヌルヌルとメニューが出てくるようなアニメーションを設定しています。

応用:
右からヌルヌル出てくるドロワーメニューを設置するには?

 ちなみに今回は左からヌルヌル出てくるドロワーメニューについて解説していますが、右からヌルヌル出てくるドロワーメニューを設置したい場合は、CSSにて

.drawer-nav {
	background: #fff;
	box-sizing: border-box;
	height: 100%;
	overflow-y: scroll;
	position: fixed;
	right: -200px;
	top: 0;
	transition: all .5s;
	width: 200px;
	z-index: 9999;
}

.drawer-nav.open {
	right: 0;
	transform: translateZ(0);
}

上でハイライトで示しているように、
right: ○○○○px;
といった感じで記述してあげることで右からヌルヌル出てくるドロワーメニューを設置することが可能になります!

記述すべきjQuery

 続いて記述すべきjQueryは以下になります。

<script>
$(function() {
	$('.menu-btn').click(function() {
		$('.drawer-nav').toggleClass('open');
		$('.drawer-overlay').toggleClass('open');
		$('body').toggleClass('open');
	});
	$('.drawer-nav ul li a').click(function() {
		$('.drawer-nav').removeClass('open');
		$('.drawer-overlay').removeClass('open');
		$('body').toggleClass('open');
	});
	$('.drawer-overlay').click(function() {
		$('.drawer-nav').removeClass('open');
		$('.drawer-overlay').removeClass('open');
		$('body').toggleClass('open');
	});
});
</script>

ハンバーガーボタンをクリック(タップ)した時の挙動の設定

 上記見本コードにて、3〜7行目の

$('.menu-btn').click(function() {
	$('.drawer-nav').toggleClass('open');
	$('.drawer-overlay').toggleClass('open');
	$('body').toggleClass('open');
});

にてハンバーガーボタンをクリック(タップ)した時にドロワーメニューがヌルヌルと出てくるよう設定しています。

また、

.drawer-nav
.drawer-overlay
body

にclass=”open”が追記されるようにも設定しており、こうすることでメニューが横からヌルヌルと出てくるようになっています!

他にも、8〜12行目にてメニューのリンクがクリック(タップ)された時の挙動、13〜17行目にて黒い半透明部分がクリック(タップ)された時の挙動をそれぞれ設定することで、ドロワーメニューのjQueryの設定は完了になります。

まとめ

 急ぎ足ではありましたが、以上の設定をそれぞれで行うことで横からヌルヌル出てくるドロワーメニューを設定することができます!

メニュー幅やメニューの背景色など、細かく設定する必要がある部分は出てきますが、今回紹介した方法がお役に立てれば…と思いますo(_ _*)o

スポンサーリンク
検 索