
ハンバーガーメニューもすでにスタンダードなテクニックになってひさしいいですが、ポジションは左上か右上が多いですが、スマホ画面が大きくなるにつれ、意外と上にあるって不便だな〜と感じることもたまにあったので、今回ボトムナビゲーションとして配置してみました。
どうせなら、ちょっとお洒落にとメニュー展開をフワッとした感じでアニメーションしたのでメモします。

プラグインを設置する
定番のjQueryを用意し、ギミック部分nになるfunction.js(後述)を設置します。
<script src='https://code.jquery.com/jquery-3.3.1.min.js'></script> <script src="js/function.js"></script>
html
ハンバーガーメニュー部分のhtmlです。
<div class="hamburger"><span></span><span></span><span></span></div> <nav id="nav"> <div id="nav-list"> <ul> <li><a href="#">Top</a></li> <li><a href="#">About</a></li> <li><a href="#">Service</a></li> <li><a href="#">Contact</a></li> </ul> </div> </nav> <div class="bg-circle"></div>
ハンバーガーは以下の部分です。
<div class="hamburger"><span></span><span></span><span></span></div>
クリックすると.bg-circleがフワッと広がり、メニューがディレイアニメで出現します。
css
cssを記述します。
#g-nav.panelactive{
position:fixed;
z-index: 999;
top: 0;
width:100%;
height: 100vh;
}
/*背景*/
.bg-circle{
position: fixed;
z-index:100;
width: 100px;
height: 100px;
border-radius: 50%;
background: #000;
transform: scale(0);
bottom:-30px;
left:calc(50% - 50px);
transition: all .6s;
}
.bg-circle.circleactive{
transform: scale(50);
}
/*メニューの縦スクロール*/
#nav-list{
display: none;
position: fixed;
z-index: 999;
width: 100%;
height: 100vh;
overflow: auto;
-webkit-overflow-scrolling: touch;
}
#nav.panelactive #nav-list{
display: block;
}
/*メニュー*/
#nav ul {
opacity: 0;
position: absolute;
z-index: 9999;
top:50%;
left:46%;
transform: translate(-50%,-50%);
}
#nav.panelactive ul {
opacity:1;
}
#nav.panelactive ul li{
animation-name:gnaviAnime;
animation-duration:1s;
animation-delay:.2s;
animation-fill-mode:forwards;
opacity:0;
}
@keyframes gnaviAnime{
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
#nav li{
text-align: center;
list-style: none;
}
#nav li a{
color: #fff;
text-decoration: none;
padding:10px 0;
display: block;
text-transform: uppercase;
letter-spacing: 0.1em;
font-weight: bold;
}
/*ボタン*/
.hamburger{
position:fixed;
bottom:10px;
left:calc(50% - 25px);
z-index: 9999;
cursor: pointer;
width: 50px;
height:50px;
border-radius: 50%;
background: #000;
}
.hamburger span{
display: inline-block;
transition: all .4s;
position: absolute;
left: 14px;
height: 3px;
border-radius: 2px;
background-color: #fff;
width: 45%;
}
.hamburger span:nth-of-type(1) {
top:15px;
}
.hamburger span:nth-of-type(2) {
top:23px;
}
.hamburger span:nth-of-type(3) {
top:31px;
}
.hamburger.active span:nth-of-type(1) {
top: 18px;
left: 18px;
transform: translateY(6px) rotate(-45deg);
width: 30%;
}
.hamburger.active span:nth-of-type(2) {
opacity: 0;
}
.hamburger.active span:nth-of-type(3){
top: 30px;
left: 18px;
transform: translateY(-6px) rotate(45deg);
width: 30%;
}
hamburgerをページ下部へ設置
.hamburger{
position:fixed;
bottom:10px;
left:calc(50% - 25px);
}
.hamburgerがクリックされたら.bg-circleが0.6秒のフワッとアニメで広がります。
/*クリック前*/
.bg-circle{
transform: scale(0);
transition: all .6s;
}
/*フワッと広がる*/
.bg-circle.circleactive{
transform: scale(50);
}
そのあと、ディレイアニメでメニューが表示されます。
#nav.panelactive ul {
opacity:1;
}
#nav.panelactive ul li{
animation-name:gnaviAnime;
animation-duration:1s;
animation-delay:.2s;
animation-fill-mode:forwards;
opacity:0;
}
@keyframes gnaviAnime{
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
js
function.jsを記述します。
$(".hamburger").click(function () {
$(this).toggleClass('active');
$("#nav").toggleClass('panelactive');
$(".bg-circle").toggleClass('circleactive');
});
$("#nav a").click(function () {
$(".hamburger").removeClass('active');
$("#nav").removeClass('panelactive');
$(".bg-circle").removeClass('circleactive');
});
$(“.hamburger”)がボタンのギミックです。
クリックされたらクラスが付与され、背景とメニューが展開されます。
$(“#g-nav a”)がメニューのギミックです。
クリックしたらクラスを削除し背景とメニューが閉じます。
以上です。
positionを変えたりすることで、いろんな展開方法が楽しめそうです。