レスポンシブ対応のサイト制作時において、PCサイト用のグローバルメニューは、スマホ時などにはコンパクトにするために、ハンバーガーメニューなどにするケースがあります。ちなみに、なぜハンバーガーメニューと呼ばれるかというと、メニューを展開するアイコンの三本線が、ハンバーガーに見えることからそう呼ばれている様です。
ハンバーガーメニューは、CSSだけで実装できるものやJQueryと併用するものなど様々です。
CSSのみで実装(ドロワーメニュー)
<div id="drawer"> <input id="input" type="checkbox" class="unshown"> <label id="open" for="input"><span></span></label> <label class="unshown" id="close" for="input"></label> <div id="menu-content">メニューの中身</div> </div>
#drawer { position: relative; } .unshown { display:none; } #open { display: inline-block; width: 30px; height: 22px; vertical-align: middle; } #open span, #open span::before, #open span::after { position: absolute; height: 3px; width: 25px; border-radius: 3px; background: #555; display: block; content: ""; cursor: pointer; } #open span::before { bottom: -8px; } #open span::after { bottom: -16px; } #close { display: none; position: fixed; z-index: 99; top: 0; left: 0; width: 100%; height: 100%; background: black; opacity: 0; transition: .3s ease-in-out; } #menu-content { overflow: auto; position: fixed; top: 0; left: 0; z-index: 9999; width: 90%; max-width: 330px; height: 100%; background: #fff; transition: .3s ease-in-out; transform: translateX(-105%); } #input:checked ~ #close { display: block; opacity: .5; } #input:checked ~ #menu-content { transform: translateX(0%); box-shadow: 6px 0 25px rgba(0,0,0,.15); }
JQuery(JavaScript)を使ったメニュー
<header> <h1>サンプルサイト</h1> <nav class="gnavi__pc-style"> <ul> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> <li><a href="#">メニュー3</a></li> <li><a href="#">メニュー4</a></li> </ul> </nav> <!--768px以下で表示--> <div class="menu-btn"> <span></span> <span></span> <span></span> </div> <nav class="gnavi__sp-style"> <ul> <li><a href="#">メニュー1</a></li> <li><a href="#">メニュー2</a></li> <li><a href="#">メニュー3</a></li> <li><a href="#">メニュー4</a></li> </ul> </nav> <!--/768px以下で表示--> </header>
header { width: 100%; background-color: #ddd; padding: 30px; display: flex; justify-content: space-between; align-items: center; position: relative; } h1 { font-size: 20px; font-weight: bold; } .gnavi__pc-style { margin: 0 0 0 auto; } .gnavi__pc-style ul { display: flex; justify-content: space-between; } .gnavi__pc-style ul li:not(:last-of-type) { margin-right: 10px; } /*ここから下がハンバーガーメニューのスタイル*/ .gnavi__sp-style { display: none; } @media screen and (max-width: 768px) { .gnavi__pc-style { display: none; } .gnavi__sp-style { display: block; } /*メニューボタン 展開前*/ .menu-btn { display : block; position: fixed; z-index: 3; right: 30px; top: 20px; width: 42px; height: 42px; cursor: pointer; text-align: center; } .menu-btn span { display : block; position: absolute; width: 30px; height: 2px ; left: 6px; background: #555; transition: 0.3s ease-in-out; } .menu-btn span:nth-of-type(1) { top: 10px; } .menu-btn span:nth-of-type(2) { top: 20px; } .menu-btn span:nth-of-type(3) { top: 30px; } /*メニューボタン 展開後*/ .menu-btn.active span:nth-child(1) { top: 16px; left: 6px; background :#fff; transform: rotate(-45deg); } .menu-btn.active span:nth-child(2), .menu-btn.active span:nth-child(3) { top: 16px; background :#fff; transform: rotate(45deg); } /*スマホ用のメニュー*/ .gnavi__sp-style { position: fixed; z-index: 2; top: 0; left: 0; color: #fff; background-color: rgba(0,0,0,0.7); text-align: center; width: 100%; height: 100vh; opacity: 0; transition: opacity .6s ease, visibility .6s ease; display: flex; align-items: center; } .gnavi__sp-style ul { margin: 0 auto; padding: 0; width: 100%; } .gnavi__sp-style ul li { list-style-type: none; padding: 0; width: 100%; transition: .4s all; } .gnavi__sp-style ul li:last-of-type { padding-bottom: 0; } .gnavi__sp-style ul li:hover{ background :#ddd; } .gnavi__sp-style ul li a { display: block; color: #fff; padding: 1em 0; text-decoration :none; } .gnavi__sp-style.active { opacity: 1; } }
$(function() { $('.menu-btn').click(function() { $(this).toggleClass('active'); if ($(this).hasClass('active')) { $('.gnavi__sp-style').addClass('active'); } else { $('.gnavi__sp-style').removeClass('active'); } }); });
この記事を書いた人管理人
SAKURAGRAPHICA代表
会社員の傍ら、フリーランスでWEBサイトの制作やWordPressによるCMSの構築・障がい者の就労支援としてホームページ制作の職業指導員も行っております。