ハンバーガーメニュー作成(2)

チェックボックスで作るハンバーガーメニュー

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

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

前回のハンバーガーメニューはjqueryを使って開閉させましたが
今回はcssだけで開閉させたいと思います( ¯•ω•¯ )

<input type="checkbox" id="switch">
<label for="switch"><p><span></span></p></label>
<nav id="NavWrap">
  <ul>
    <li><a href="#"><span>TOP</span></a></li>
    <li><a href="#"><span>ブログ</span></a></li>
    <li><a href="#"><span>アクセス</span></a></li>
    <li><a href="#"><span>コンタクト</span></a></li>
  </ul>
</nav>

まずはhtmlです。input要素でチェックボックスを作ります。
上2行がハンバーガーメニューのボタンになります。
<input type=”checkbox” id=”switch”> <label for=”switch”>~</label> で
チェックボックスが出来ます。
<span></span>はハンバーガーメニューの横線です。beforeとafterを付けて
3本線にします。
NavWrapというnavにハンバーガーメニューの中身のul,liを入れてあります。


#switch{
	display: none;
}
#switch ~ label {
	padding: 12px 12px;
	width: 60px;
	height: 60px;
	background: #333;
	position: fixed;
	box-sizing: border-box;
	top: 0;
	right: 0;
}
#switch ~ label span{
	display: block;
	width:22px;
	height:2px;
	top: 50%;
	left: 0;
	right: 0;
	margin:auto;
	background: #fff;
	position: absolute;
	-webkit-transition: 0.2s transform;
	transition: 0.2s transform;
}
#switch ~ label span:before,
#switch ~ label span:after{
	content: "";
	display: block;
	background: #fff;
	position: absolute;
	width:22px;
	height:2px;
	left: 0;
	right: 0;
	margin: auto;
}
#switch ~ label span:before{
  top: -9px;
}
#switch ~ label span:after{
  top: 9px;
}

#switch :これはチェックボックスの□の表示です。いらないので消してあります。

#switch ~ label :これはハンバーガーメニューの箱の部分です。fixedで絶対位置に指定してあります。幅、高さお好みで(‘ω’)ノ

#switch ~ label span :これはハンバーガーの三本線の真ん中の部分です。
position: absolute; で位置指定widthとheightを外の箱から見ていい感じの大きさに調整してあります。transformは押した時に三本線が×印になるのですがその時にスムーズな動きを見せるための物です。

#switch ~ label span:before,
#switch ~ label span:after  :これは疑似要素で三本線の一番上と一番下を配置してます。

#switch:checked ~ label span{
	-webkit-transform:rotate(-45deg) ;
	transform:rotate(-45deg) ;
}
#switch:checked ~ label span:before{
	top:0;
}
#switch:checked ~ label span:after{
	-webkit-transform:rotate(270deg);
	transform:rotate(270deg);
	top:0;
	margin-top:0;
}

チェックボックスを押すとcheckedになります。
checkedになった時にspanがー45deg,
span:afterが270deg回転して×になります。

この時に先ほど付いていた transition: 0.2s が
仕事をします(*’ω’*)

#switch:checked ~ #NavWrap { 
	display: block; 
	top: 0;
}
#NavWrap{
	padding-top: 0;
	position: fixed;
	top: -100%;
	left: 0;
	width: calc(100% - 60px);
	height: 100%;
	background: rgba(0,0,0,0.8);
	transition: all 0.4s;
	padding: 60px;
	box-sizing: border-box;
}

チェックボックスにチェック付くとNavWrapという
ハンバーガーメニューの中身が上から出てくるという形です。
top:-100%で画面外、top:0で画面に見えてきます。

width : calc(100% – 60px) 、calcはプロパティ値を指定する
際に計算を行うことができるcssです。

transition: all 0.4sで0.4秒かけて上から出てきます。


↓注意.scroll-prevent これつけるとページ内リンクは上手く移動しないです

.scroll-prevent {
	position: fixed;
	z-index: -1;
	width: 100%;
	height: 100%;
}
body {
	overflow-y: scroll;
}
li{
	text-align: center;
}
li a{
	display: block;
	color: #fff;
	padding: 30px 0;
	text-decoration: none;
}

.scroll-prevent というclassはハンバーガーメニューが表示されている際にスクロールさせなくさせるcssです。jqueryでハンバーガーメニュー表示の際つけるように記述します。

body { overflow-y: scroll; } はスクロールバーが消えないようにする為の命令です。

後はハンバーガーメニューの中身の調整です

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

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

$(function(){
  $('#switch').on('change', function(){
    var st = $(window).scrollTop();
    if($(this).prop("checked") == true) {
      $('html').addClass('scroll-prevent');
      $('html').css('top', -(st) + 'px');
      $('#switch').on('change', function(){
        if($(this).prop("checked") !== true) {
          $('html').removeClass('scroll-prevent');
          $(window).scrollTop(st);
        }
      });
    }
  });
});

チェックボックスにチェックが付いたら
.scroll-prevent を付けますよ、
外しますよという命令の記述です( ¯•ω•¯ )
これでハンバーガーメニューが開いてる時はスクロール禁止
閉じたらスクロール解禁に出来ます。


$(function() {
    $('#NavWrap li a[href]').on('click', function(event) {
        $('#switch').prop('checked', false);
    });
});

ハンバーガーメニューの中身のリンクを押したら
チェックを外しますという命令です。
これでリンクを押した時にハンバーガーメニューが閉じます(‘ω’)

というわけでcssだけで開閉させるハンバーガーメニューでした。
結局jquery使ってますが。。( ¯•ω•¯ )

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

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

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