
JSを使わずにCSSだけで作るドロワーメニュー
ドロワーメニューまたはスライドメニュー
呼び方は様々ありますが、スマホのアプリ等でもお馴染みの、
横からスライドインしてくるメニューです。
レスポンシブでもよく使われます。
JSのプラグインだと、mmenuやDrawerなどがありますが、
現在ではCSS3もほとんどのブラウザで利用可能になりましたので、
簡単なものであればCSSでも実装可能です。
※IEでは9以降で動作します。
動作デモ
まずはデモを用意しました。実際に動かしてみてください。
See the Pen Gjygdy by leo (@leo-trym) on CodePen.
ソース
HTML
<label class="toggle" for="open"><i class="fa fa-bars" aria-hidden="true"></i>
</label>
<input id="open" type="checkbox">
<div id="menu">
<nav>
<ul>
<li><a href="#">HOME</a></li>
<li><a href="#">ABOUT</a></li>
<li><a href="#">BLOG</a></li>
</ul>
</nav>
</div>
肝心なのは3〜4行目です。
inputのチェックボックスの次に、隠しておきたい要素(#menu)を置きます。
CSS
ul {
margin: 0;
padding-left: 0;
}
li {
list-style: none;
}
a {
text-decoration: none;
color: #fff;
}
#menu {
position: fixed;
top: 0;
right: -340px; /* メニューのwidth + padding */
width: 300px; /* メニューのwidth */
height: 100%;
padding: 20px;
transition: left .5s, right .5s; /* アニメーション */
background-color: rgba(86, 86, 86, .7);
}
.toggle {
font-size: 50px;
cursor: pointer;
}
.toggle:hover {
text-decoration: underline;
}
#open {
display: none;
}
/* :checked 擬似クラスを使って、#openがチェック状態になった時に、#menuが「right: 0;」になります。 */
#open:checked + #menu {
right: 0;
}
:checked + #menu をつかうことにより、チェックされたinputの次の要素を指定できます。
まとめ
メニュー内にスクロールが必要なときには、
nav内をスクロールするように指定すれば対応できます。
高機能なプラグインには敵いませんが、シンプルですので直ぐに実装できます。
なお、:checked を利用すれば同じ方法でアコーディオンなども実装可能です。
Writer
KO
誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。







































