jQueryを利用してドロワーメニュー(ハンバーガーメニュー)を実装する事はよくあることですが、他のjQueryの影響でうまく動かなかったり、他のjQueryで実装した機能が動作不良になったりと、jueryに疎いとなかなか手こずります。
そこで、CSSだけで実装できるドロワーメニューを下記に覚え書きとして記載します。
下記コードを応用すれば、Wordpressのカスタムメニューへの実装も可能です。(実際に私が利用しています)
基本機能
- 画面右側にドロワーメニューを開くボックスを配置
- 当該ボックスをクリックすると、画面右からメニューが出てくる
- 「×」をクリックするとメニューが閉じる
- メニュー内でスクロールができる
必要な知識
- HTML
- CSS
HTML
<input type="checkbox" id="menu-btn-check">
<label for="menu-btn-check" class="menu-btn"><span></span></label>
<div id="navigation">
<ul>
<li><a href="#">メニュー01</a></li>
<li><a href="#">メニュー02</a></li>
<li><a href="#">メニュー03</a></li>
<li><a href="#">メニュー04</a></li>
<li><a href="#">メニュー05</a></li>
<li><a href="#">メニュー06</a></li>
</ul>
</div>
input type="checkbox"
でドロワーメニューの出し入れを判定します。
li
内リンクは、「#」にしていますが、該当のページのURLを入れてください。
テキストも同様です。
CSS(ナビゲーション部分の体裁を整える)
/* =======================================
ナビゲーション
======================================= */
#menu-btn-check {
display: none;
}
#navigation {
width: 30%;
height: 100%;
position: fixed;
top: 0;
left: 100%; /*leftの値を変更してメニューを画面外へ */
z-index: 80;
background-color: #1F98FF;
transition: all 0.5s; /*アニメーション設定*/
overflow: auto;
}
#navigation a,
#navigation a:link,
#navigation a:active,
#navigation a:visited,
#navigation a:hover {
color: #ffffff;
text-decoration: none;
}
#navigation ul {
display: block;
width: 90%;
margin: 0 auto;
text-align: center;
}
#navigation ul li {
padding: 1em 0.5em;
border-bottom: solid 1px #ffffff;
list-style: none;
}
ここでポイントは、#navigation
にoverflow: auto;
を入れること。
リンクが増えても、ナビゲーションの中でスクロールができるようになっています。
高さは画面サイズいっぱいになるようにheight: 100%;
にしています。
幅は画面の30%くらいになるようにしています。
お好みで調整してください。
CSS(ナビゲーションを表示するためのボタンの装飾と動作)
/* =======================================
MENUが☓に変化
======================================= */
.menu-btn {
position: fixed;
top: 10px;
right: 10px;
height: 60px;
width: 60px;
z-index: 90;
background-color: #1F98FF;
border: #fff 1px solid;
}
.menu-btn span,
.menu-btn span:before,
.menu-btn span:after {
content: '';
display: block;
height: 3px;
width: 25px;
border-radius: 3px;
background-color: #ffffff;
position: absolute;
}
.menu-btn span:before {
bottom: 0.5em;
}
.menu-btn span:after {
top: 0.5em;
}
/* --- ボタンをクリックした時の動作 --- */
#menu-btn-check:checked ~ #navigation {
left: 70%; /*メニューを画面内へ*/
}
#menu-btn-check:checked ~ .menu-btn span {
background-color: rgba(255, 255, 255, 0);/*メニューオープン時は真ん中の線を透明にする*/
}
#menu-btn-check:checked ~ .menu-btn span::before {
bottom: 0;
transform: rotate(45deg);
}
#menu-btn-check:checked ~ .menu-btn span::after {
top: 0;
transform: rotate(-45deg);
}
スマホ表示での利用を想定しているので、余白は大きめに設定しています。
画面の端からの距離は、#navigation
と.menu-btn
のtop
right
で調整してください。
画面スクロールに追随するようにposition: fixed;
にしていますが固定したい場合は変更してください。
まとめ
はじめて実装される場合は、とりあえず適当なhtmlとcssファイルを作って上記コードをコピペして、動作の確認とどのコードがどこに影響するものなのかを確認してからカスタマイズすることをおすすめします。
案外簡単に実装できるので、jQuery使わなくてもいいかなと最近思ってます。