スマホのWEBデザインをしているのに必ず決めなきゃいけない事は「ナビゲーションメニューをどのタイプでいくか」って事です。表示領域の少ないスマホの画面ではできるだけナビゲーションはコンパクトにわかりやすく見せたいもんです。
ナビゲーションのタイプはいくつかありますが、今回はFacebookアプリのナビゲーションメニューですっかりお馴染みになった横にスライドするタイプのスライド式ナビゲーションを実装した時の備忘録
スライド式ナビゲーションは基本jQueryを使って実相するパターンがほとんどでプラグインも多く配布されています。その中でも比較的人気なのが「slidebars.js」かと思いますので、今回はこちらを使用します。
【配布先サイト】Slidebars
ダウンロードしたファイルにはバージョン違いでたくさんのファイルが梱包されていますが、使用するのは「slidebars.css」と「slidebars.js」のみです。
jQueryの読み込みコードとJavaScriptを記述。
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> <script type="text/javascript" src="js/slidebars.js"></script> <link rel="stylesheet" href="css/slidebars.css" media="all">
<script> (function($) { $(document).ready(function() { $.slidebars(); }); }) (jQuery); </script>
【HTML】
<body> <div id="sb-site"> <header> <p class="sb-toggle-left">menu</p> </header> <div id="contents"> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> </div><!-- /#contents --> </div><!-- /#sb-site --> <div class="sb-slidebar sb-left sb-style-push"> <nav> <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> <li><a href="#">メニュー06</a></li> </ul> </nav> </div><!-- /.sb-slidebar -->
CSSのクラス名の付け方をデフォルト通りに行くと以下の感じ
これで、とりあえず「menu」のテキストを押せばサイドからニュッと出てくるナビゲーションが出来上がります。
これでは、いまいちピンとこないので実際実装した時のシチュエーションで、スマホサイトに適したデザインをCSSで組んでみます。※当然横幅可変のレイアウトです。
ナビゲーションを帯型でいくので、メニューボタンを左側に、電話をかけるボタンとお問い合わせボタンを左に設置してみました。
<body> <div id="sb-site"> <header> <nav id="sp_menu"> <div class="sb-toggle-left">menu</div> <div class="sp-mail_btn"><a href="#"></a></div> <div class="sp-tel_btn"><a href="tel:##"></a></div> </nav> </header> <div id="contents"> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> <p>コンテンツ</p> </div><!--#contents--> </div><!--#sb-site--> <div class="sb-slidebar sb-left sb-style-push"> <ul id="nav_list"> <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> <li><a href="#">メニュー07</a></li> <li><a href="#">メニュー08</a></li> </ul><!-- /#nav_list --> </div><!— /.sb-slidebar --> </body>
【CSS】
body{ margin:0; padding:0; width:100%; min-width: 320px; font-size: 62.5%; } a{text-decoration: none;} ul, li{ list-style: none; margin: 0; padding: 0; } /*ヘッダーナビゲーション--------------------------*/ nav#sp_menu{ background-color: #F70841; padding:7px 0; overflow: hidden; } .sb-toggle-left, .sp-tel_btn, .sp-mail_btn{ width:44px; height:44px; border:2px solid #faf5ef; position: relative; text-indent:100%; white-space:nowrap; } .sb-toggle-left a, .sp-tel_btn a, .sp-mail_btn a{ width:44px; height:44px; display: block; } .sb-toggle-left{ float: left; margin-left:2%; } .sb-toggle-left{ background: url(../img/icon_menu.png) center no-repeat; background-size: 70%; } .sp-tel_btn a{ background: url(../img/icon_tel.png) center no-repeat; background-size: 80%; } .sp-mail_btn a{ background: url(../img/icon_mail.png) center no-repeat; background-size: 80%; } .sp-tel_btn, .sp-mail_btn{ float: right; margin-right: 3%; border-radius: 50px; } /*メニューリスト--------------------------*/ ul#nav_list{ overflow: hidden; } ul#nav_list li{ font-size: 1.3em; border-bottom: 1px dashed #cce7e3; padding:5% 5%; text-align: right; } ul#nav_list li a{ color: #fff; display: block; }
以下、完成版のデモです。
メニュー用の画像はWEBフォントのアイコンを使おうかとも思ったんですが、borderで枠を作ってその中央に「background」に「center」指定しています。大きさは決め打ちで作らなくても、「background-size」で調整しています。
※ナビゲーション部分はスクロールしたら見えなくなりますが「position:fixed」で固定するのもいいかもしれません。
※メニューを開いた時の背景色を変更したい場合は梱包されている「slidebars.css」に記述されている「.sb-slidebar」のbackgroundの色を変更すればおけです。
今回実装してから気づいたんですが、スライドしてメニューを表示させた時にコンテンツ部分(#sb-siteで囲ってる部分)がスワイプすると動いてしまう事が問題かなと。
ナビゲーションメニューの数が少ないとスワイプすることもないんでしょうが・・・多い場合はコンテンツ部分もスクロールするので若干操作性がよくないかと思いました。
その辺も踏まえてもう少し改良できればなぁと思いながら今回は以上ですm(_ _)m