jqueryとcssでハンバーガーメニューを作成する

ハンバーガーメニューを作っていきます!

See the Pen Untitled by yu-shi (@webpara) on CodePen.

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

コピペどーぞ( ¯•ω•¯ )
解説していきます。

<div class="button"><span></span><span></span><span></span></div>
.button{
	position: fixed;
	display: inline-block;
	width: 64px;
	height: 64px;
	top:10px;
	right: 10px;
	z-index: 999;
}
.button span{
	display: inline-block;
	position: absolute;
	right: 0;
	left: 0;
	height: 4px;
	width: 43px;
	margin: auto;
	transition: all .4s;
	background: #666;
}
.button span:first-of-type {
	top: 15px;
}

.button span:nth-of-type(2) {
	top: 30px;
}

.button span:last-of-type {
	top: 45px;
}

まずはhtmlとcssです。右上にある三本線のボタンを作成するのが上記の記述です。
まず .button という縦横同じサイズの正方形を
作ってfixedで上から10px、右から10pxに配置します。
z-indexというのはフォトショで言ったら
レイヤー順みたいなものです。
大きい数字になるほど上に配置されます。

htmlでdivの中にspanが3つ入ってますが
これがハンバーガーメニューの横線3本
になります。
span:first-of-type が1番最初の線、
span:nth-of-type(2) が2番目の線、
span:last-of-type が最後の線になります。

.button span のcssですがinline-blockにしたspanをpositionで上から15pxづつ空けて
配置しています。
spanの幅は43px,高さ4pxです。
right:0; left:0; margin:autoでbuttonの中で
横位置が真ん中になる様にしてあります。

$(function() {
	$('.button').click(function(){
	$(this).toggleClass('active');
	$('.nav').toggleClass('view_menu');
	});
});

jqueryの説明です。
上を日本語にすると.buttonをクリックしたら.buttonにactiveという
classが付きますよーとなって同時に.navにview_menuというclassが
付きますよーという感じです(‘ω’)

.active span{
	background: #fff;
}
.active span:first-of-type {
	transform: translateY(15px) rotate(-45deg);
}

.active span:nth-of-type(2) {
	opacity: 0; 
}

.active span:last-of-type {
	transform: translateY(-15px) rotate(45deg);
}

.activeというclassが付いたbuttonのspanは
色が白色に変化します。

最初と最後のspanが45度傾いて
Y軸に15px動きます。

2番目のspanは透明になって見えなくなります
( ¯•ω•¯ )

.nav{
	background: rgba(0,0,0,0.7);
	padding-top: 100px;
    display: block;
	box-sizing: border-box;
	position: fixed;
	top: 0;
	max-width: 100%;
	width: 100%;
	height: 100%;


	right: -100%;
	transition: right .5s;
	z-index: 99; 
}
.view_menu {
	right: 0;
}

navというclass名のulにpositionが
指定されていてright:-100%;となっています。
これはモニターで見えるより外の位置に
配置してあり見えない状態です。

しかしjqueryによりnavのクラスにview_menuと言うclassが付くとright:0;の命令が付与しますので端から移動します。

そのほか背景色(薄い黒)、高さ、幅など指定されてます。
transition:right .5s;は右位置が0.5秒かけてアニメーションしますと言う意味です。
z-index:99;で元の画面より前に、buttonより後ろに配置してあります。buttonより前に来るとbuttonが押せなくなります。

liの説明は省略します( ¯•ω•¯ )

<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>

jqueryを使う時はこれをお忘れなく(‘ω’)ノ

$(function() {	
  $('.button').click(function () {   
    if ($(this).hasClass("active")) {  
      $("html").addClass("no-scroll");  
    } else {                              
      $("html").removeClass("no-scroll");
    }
  });
});
html.no-scroll,
html.no-scroll {
	position: fixed;
	z-index: -1;
	width: 100%;
	height: 100%;
}
body {
    overflow-y: scroll;
}

jqueryとcss並べてみました。.no-scrollというclassはスクロールさないようにする記述がされてます。
jqueryはbuttonをクリックして”active”のclassがついていたら”html”にno-scrollのclassを追加、
buttonに ”active”のclassが なかったら ”html”にno-scrollのclassを外すとなってます。

body{overflow-y:scroll;} これがないと.no-scrollが付いた時にスクロールバーが無くなってその分
buttonが右にずれてしまうのでそれを防ぐために記述してあります。

というわけでハンバーガーメニューの作り方でした。right:-100%からright:0の所を
leftやtopに変更すれば出てくる位置が変更できますね(*’ω’*)

プロフィール
この記事を書いた人
yu-shi

Webサイト作成・ECサイト運営をしてます。
歴史小説が大好きで好きな武将は石田三成。

yu-shiをフォローする
html・css・jQueryのメモ帳
うぇぶぱら
タイトルとURLをコピーしました