Sponsored Link
今回はハンバーガーメニューをHTMLとCSSだけで設置する方法を解説します。
サルワカのWordPressテーマ「SANGO」もこの方法によりモバイル用メニューを設置しています。
デモも用意してみました。
ナビゲーションドロワーと呼ばれることも
ナビゲーションドロワーと呼ばれることも
ちなみに、このような画面の左から右へとニョキっと表示されるメニューのことは「ナビゲーション・ドロワー」と呼ばれたりします。
ナビゲーション・ドロワーは、Googleのマテリアルデザインでよく使われます。デザインのポイントは、公式ガイドライン(英語)にも載っているので、ぜひチェックしてみてください。
今回は「ハンバーガーメニュー」✕「ナビゲーション・ドロワー」なモノを作っていきたいと思います。
1. ハンバーガーメニューのHTML
1. ハンバーガーメニューのHTML
まずは、HTMLから。ヘッダーまわりはサイトによってまちまちかと思うので、header
とハンバーガーメニューだけを書いています。
<header>
<div id="nav-drawer">
<input id="nav-input" type="checkbox" class="nav-unshown">
<label id="nav-open" for="nav-input"><span></span></label>
<label class="nav-unshown" id="nav-close" for="nav-input"></label>
<div id="nav-content">ここに中身を入れる</div>
</div>
</header>
input
やらlabel
やらが入っていて、何のことが分かりづらいかと思うので、少し解説をします。
解説
全体はheader
で囲んでいます。他にもサイトタイトルやロゴ画像を入れるのではないかと思います。<div id="nav-drawer">
の中に、ハンバーガーメニューとナビドロワーの中身を全て詰め込みます。
input
チェックボックスを用意して、ここにチェックが入ったかどうかにより、CSSを切り替えます。
label
input
に対するラベルタグを2つ用意しています。上側のラベル(id="nav-open"
)は「」として表示され、タップによりinput
にチェックを入れる役割をします。
下側のラベル(id="nav-close"
)はinput
にチェックが入ったときにのみ半透明の黒カバーとして表示されます。ここをタップすると、input
のチェックが外れます。
div id=”nav-content”
ここに、ナビゲーションドロワーの中身を入れます。サイト内のリンクなり、検索ボックスなり、自由に入れればOKです。
2. ハンバーガーメニューのCSS
2. ハンバーガーメニューのCSS
/*ヘッダーまわりはサイトに合わせて調整してください*/
header {
padding:10px;
background: skyblue;
}
#nav-drawer {
position: relative;
}
/*チェックボックス等は非表示に*/
.nav-unshown {
display:none;
}
/*アイコンのスペース*/
#nav-open {
display: inline-block;
width: 30px;
height: 22px;
vertical-align: middle;
}
/*ハンバーガーアイコンをCSSだけで表現*/
#nav-open span, #nav-open span:before, #nav-open span:after {
position: absolute;
height: 3px;/*線の太さ*/
width: 25px;/*長さ*/
border-radius: 3px;
background: #555;
display: block;
content: '';
cursor: pointer;
}
#nav-open span:before {
bottom: -8px;
}
#nav-open span:after {
bottom: -16px;
}
/*閉じる用の薄黒カバー*/
#nav-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;
}
/*中身*/
#nav-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;/*滑らかに表示*/
-webkit-transform: translateX(-105%);
transform: translateX(-105%);/*左に隠しておく*/
}
/*チェックが入ったらもろもろ表示*/
#nav-input:checked ~ #nav-close {
display: block;/*カバーを表示*/
opacity: .5;
}
#nav-input:checked ~ #nav-content {
-webkit-transform: translateX(0%);
transform: translateX(0%);/*中身を表示(右へスライド)*/
box-shadow: 6px 0 25px rgba(0,0,0,.15);
}
各CSSの解説はコメントに載せました。これでをタップすると中身が現れ、薄い黒カバーの部分をタップすると閉じるようになります。
なお、input
へのチェックの有無によるCSSの切り替えは「同じ階層の後ろに並ぶ要素に適用させるセレクタ」である「~
」により行っています。詳しくはこちらの記事で解説しています。
モバイル(スマホ/タブレット)だけで表示させる方法
モバイル(スマホ/タブレット)だけで表示させる方法
「PC表示では、ハンバーガーメニューは非表示にしたい」という場合もあるかと思います。
WordPressの場合
WordPressの場合には、モバイル(スマホ・タブレット)とPCで表示を切り替える条件分岐が用意されているので楽ですね。
<header>
<?php if ( wp_is_mobile() ) : ?>
<div id="nav-drawer">
<input id="nav-input" type="checkbox" class="nav-unshown">
<label id="nav-open" for="nav-input"><span></span></label>
<label class="nav-unshown" id="nav-close" for="nav-input"></label>
<div id="nav-content">ここに中身を入れる</div>
</div>
<?php endif; ?>
</header>
<?php if( wp_is_mobile() ) : ?>
〜<?php endif; ?>
にはさまれた「ハンバーガーメニュー&ナビゲーションドロワー部分」はモバイルでのみ表示されるようになります。
CSSでレスポンシブに調整
ブラウザサイズに応じて非表示にするのも手ですね。
~さきほどのCSSなど(略)~
@media screen and (min-width:480px) {
#nav-open {
display:none;
}
}
上のように書くと「ブラウザサイズが480px以上の場合にはが非表示」になります。これで、ナビゲーションドロワーが開けられることもありません。隠しているだけなのであまり美しくはありませんが…。
というわけで、HTMLとCSSだけで作る「ハンバーガーメニュー」&「ナビゲーションドロワー」の紹介でした。よかったらぜひ試してみてください。