ハンバーガーメニューの実装
2020-05-25
スマホなどのページを作成した際に、メニューボタンを右上にボタンを配置して、形が変化するようなボタンを、『ハンバーガーメニュー』と呼んだりしますが、今回は、その設置と動作について、ご紹介します。
例として、下記のような動作をさせる記述になります。
まずは、ソースから
1 2 3 4 5 6 7 |
<div class="menu"> <div> <span></span> <span></span> <span></span> </div> </div> |
次に、クリック(または、タップ)時に動作させる動作を記述します。
1 2 3 |
$('.menu').on('click', function(){ $(this).toggleClass('active'); }); |
jQueryでは、toggleClass();でクラスを付与するだけにして、動きについてはCSS等で設定することで、調整等もしやすくなります。
次に、CSSについて記述します。
少し長くなってしまうので、2つ分けて記載します。
まず、ベースとなる記述になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
.menu { display: block; width: 50px; height: 50px; position: absolute; top: 20px; right: 20px; } .menu div{ width: 100%; height: 100%; position: relative; } .menu div span{ display: block; width: 100%; height: 2px; background: #000; position: absolute; left: 0; transition: 0.4s linear; opacity: 1; } .menu div span:nth-of-type(1){ top: 10px; } .menu div span:nth-of-type(2){ top: 20px; } .menu div span:nth-of-type(3){ top: 30px; } |
.menu の中に、<div>を内包しているのは、私は普段スマホの構築をする際、.menu をposition:absolute;にて位置を指定しているため、<div>を挟むことでアニメーションさせる<span>の基準の位置となっています。もちろん、その他の方法で配置している場合は、必要ありません。
また、<span> には、transition の指定をすることで、クリックした際の動きを滑らかにします。
次に、動作部分になりますが、 jQueryでクラス( active )を付与ししているので、その時の指定になります。
1 2 3 4 5 6 7 8 9 10 |
.menu.active div span:nth-of-type(1){ transform: translateY(15px) rotate(315deg); } .menu.active div span:nth-of-type(2){ transform: translateX(10px); opacity: 0; } .menu.active div span:nth-of-type(3){ transform: translateY(-15px) rotate(-315deg); } |
といったカタチで、実装することができます。
動作については、下記のサイト様でいろいろな例をまとめてくれていますので、参考になると思います。
参考URL