ishikawa
CSSでプルダウンメニューを作ってみる
JavaScriptを使用せずに、CSSのみでスマホ向けのプルダウンメニューを実装してみました。
デモページはこちらになります。
■HTML
<div id="page"> <header id="header"> <p class="nav-open"><a href="#gNav">MENU</a></p> <nav id="gNav"> <ul> <li><a href="">メニュー</a></li> <li><a href="">メニュー</a></li> <li><a href="">メニュー</a></li> <li><a href="">メニュー</a></li> <li><a href="">メニュー</a></li> <li><a href="">メニュー</a></li> </ul> <div class="nav-close"><a href="#page">CLOSE</a></div> </nav> </header> <div id="contents"> <p>コンテンツ内容</p> <p>コンテンツ内容</p> <p>コンテンツ内容</p> </div> </div>
■CSS
必要箇所のみ抜粋しています。
#header { height: 30px; } #header #nav-open { position: absolute; width: 100%; height: 30px; z-index: 200; margin: 0; background: #000; } #header #nav-open a { position: absolute; top: 5px; right: 10px; } #gNav { width: 100%; position: absolute; top: -180px; z-index: 100; transition: top 1s; -webkit-transition: top 1s; -moz-transition: top 1s; text-align: center; background:#1a1a1a; } #gNav:target { top: 30px; }
ざっくり説明すると、メニュー部分を画面上部に隠しておいて、#gNavのtopの数値を変更して
表示・非表示を切り替える仕組みです。(#gNav の top: -180px; と #gNav:target の top: 30px;)
この数値は固定なので、メニュー・ヘッダーの高さが変わる場合は、数値を変更する必要があります。
プルダウンのアニメーションは、CSS3のtransitionと:targetを使用して、#gNavにターゲットが当たった時に表示され、ターゲットが外れた時に隠れるようにしています。
あと、プルダウンメニューをヘッダーの下から出てくるようにしたかったので、
①#headerの子要素に#nav-openと#gNavを置いて、重なり順を#nav-openが上にくるようにする。
②#nav-openを#headerと同じサイズに指定して、#nav-openに対してヘッダーの背景色をつける。
といった形にしています。