スマホサイトにハンバーガーメニューを実装しよう!
スマホサイトを作った際にハンバーガーメニューによるメニュー表示の動作は欠かせません。
jQueryの使い方をスマホメニューの作り方から学んでいきましょう。
次のような動きのメニューを作成できます。
まずはメニューを作成する
次のような構成でスマホ用のメニューを作成してください。
最初のファイルとして以下ソースを利用しても良いです。(空のHTMLです)
制作しているサイトに次のようなコードを差し込みます。
HTML
<header class="header"> <div class="header-top"> <h1 class="sitelogo">サイトロゴ</h1> <button class="button open">open</button> </div> <div class="sp-menu"> <div class="header-top-close"> <h1 class="sitelogo">サイトロゴ</h1> <button class="button close">close</button> </div> <nav class="gnav"> <ul class="gnav-list"> <li class="gnav-list-item"> <a href="#">メニュー</a></li> <li class="gnav-list-item"><a href="#">メニュー</a></li> <li class="gnav-list-item"><a href="#">メニュー</a></li> <li class="gnav-list-item"><a href="#">メニュー</a></li> <li class="gnav-list-item"><a href="#">メニュー</a></li> </ul> </nav> </div> </header> <main> <p> ここに内容が入ります </p> </main> <footer class="footer"> xxxx </footer>
CSS
/* reset */ body,ul{ padding:0; margin:0; } li{ list-style-type:none; } button{ border:none; } h1{ padding:0; margin:0; } /* 全体のレイアウト スタイル指定 */ .header-top,.header-top-close{ display:flex; justify-content: space-between; background:#ccc; align-items:center; padding:10px; } .button{ width:40px; height:40px; background:#666; border-radius:10px; color:#fff; cursor: pointer; } .header-top-close{ background:#78cac4; } .gnav-list{ background: #808080a3; color:#fff; } .gnav-list-item a{ padding: 20px 10px; text-decoration: none; display:block; color:#fff; } .footer{ background:#ccc; padding:20px; text-align:center; } /* メニューを固定配置にする */ .sp-menu{ position:fixed; top:0; left:0; width:100%; /* fixedで幅が狭くなるので追加 */ } /* 以下は ※レイアウトを作り終わってから追加すること! */ /* スマホメニューを初期状態で隠す */ .sp-menu{ transform:translateX(100%); transition:1s; /* これがないとアニメーションにならない */ } /* クリックされた際の状態(.activeのつけ外しによりアニメーションが動く)*/ .sp-menu.active{ transform:translateX(0); }
構造としてはスマホ用のメニューをレイアウトし、それが「position:fixed;」で上に載っている状態です。
スマホメニューは「.sp-menu」であり、初期状態は隠しておきます。
「.active」を追加するとアニメーションが発動し、見えるようになります。
JavaScriptを記載する
上記ではボタンを押しても動かないので、ボタンをおしたら「.sp-menu」に「.active」を追加するというスクリプトを書いてみましょう。
まずはjQueryのCDNを読み込みましょう。
一番上にある「基礎ファイル」でやる場合はすでに読み込んでいるため作業は必要ありません。
<script src="https://code.jquery.com/jquery-3.7.1.js" integrity="sha256-eKhayi8LEQwp4NKxN+CfCh+3qOVUtJn3QNZ0TciWLP4=" crossorigin="anonymous"></script>
次にスクリプトを追記しましょう。
記述は
$(function(){ });
の中に記載しないと動作しないことがあります。
$(".button.open,.button.close").click(function(){ $(".sp-menu").toggleClass("active"); });
こちらでボタンを押した場合に動作するはずです。
ボタンは2箇所ありますので、ボタン2箇所のclassを記載します。
さらに、ページ内リンクの場合メニューが開きっぱなしになってしまい邪魔なので、次の記述を追記します。
//ページ内リンクの場合メニューが邪魔になるので //ナビの中身をクリックしたら隠すように指定 $(".gnav-list-item a").click(function(){ $(".sp-menu").toggleClass("active"); });
これで完成です。
完成ファイルは以下です。
おつかれさまでした!