スマートフォンサイトでハンバーガーボタンを実装することがたまにあるので、アニメーション付きで実装する方法をメモしておきます。
サンプルコード
HTML
<div id="nav-switch"></div>
CSS
.is-openの有無でスタイルを変更していて、表示の切り替えは:beforeと:afterで行います。
#nav-switch { /* ボタンの配置 */ position: absolute; top: 10px; right: 10px; width: 25px; height: 15px; cursor: pointer; } /* バーのスタイル beforeが上部 afterが下部 */ #nav-switch:before, #nav-switch:after { content: ''; display: block; position: absolute; left: 0; width: 100%; height: 3px; border-radius: 1px; background: #000000; -webkit-transition: 0.5s; transition: 0.5s; } #nav-switch:before { top: 0; /* 真ん中のバーはbox-shadowで表示する */ box-shadow: 0 6px 0 #000000; } #nav-switch:after { top: 12px; } /* ナビゲーションが開いている時の表示(×) */ #nav-switch.is-open:before { top: 5px; -webkit-transform: rotate(45deg); transform: rotate(45deg); box-shadow: none; } #nav-switch.is-open:after { top: 5px; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); }
JavaScript
classの付け替えのみ行っています。
var navSwitch = document.getElementById('nav-switch'); navSwitch.addEventListener('click', navChange, false); // .is-open を追加・除去する関数 function navChange() { // #nav-switchについているclassのリストを取得 var classArr = navSwitch.classList; var navStatus = 'close'; // .is-openがあるかを調べてる for(var i = 0; i < classArr.length; i++) { if(classArr[i] == 'is-open') { navStatus = 'open'; break; } } if(navStatus == 'close') { navSwitch.classList.add('is-open'); } else { navSwitch.classList.remove('is-open'); } }
ハンバーガーボタンを開いた時の、メニューの表示方法を教えてください。
ひとみさん
コメントありがとうございます。
こちらの記事はハンバーガーボタン部分のアニメーションのみの記事でしたので、以下にメニューの表示を含めたサンプルをアップしました。
https://cly7796.net/blog/sample/make-the-opening-and-closing-button/index2.html
ナビを表示したとき・非表示にしたときのスタイルをCSSで用意しておいて、JavaScriptで切り替えるようにしています。
詳しくはコードをご確認いただければと思います。