このブログはTwenty Elevenの子テーマを作ってカスタマイズしてるのですが、iPhoneで見た時にグローバルナビが2行になってしまって、なんだかかっこ悪い。
↑こんな感じになっちゃう。
もっとすっきりさせたかったので、Bootstrapのグローバルナビのように開閉式にしてみました。(あくまでイメージ)
参考にしたサイト
レスポンシブデザインによくあるグローバルナビ CodingMania
まずheader.phpの以下の部分
<?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
を下記のように変更。
<p class="navtitle">メニュー</p> <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
上記に変更したうえでソースを見るとグローバルナビの部分は以下のようになります。
(aboutとprofileという固定ページを作った場合)
<nav id="access" role="navigation"> <h3 class="assistive-text">メインメニュー</h3> <div class="skip-link"><a class="assistive-text" href="#content" title="メインコンテンツへ移動">メインコンテンツへ移動</a></div> <div class="skip-link"><a class="assistive-text" href="#secondary" title="サブコンテンツへ移動">サブコンテンツへ移動</a></div> <p class="navtool">メニュー</p> <div class="menu"> <ul> <li class="current_page_item"><a href="http://xxx.com/" title="ホーム">ホーム</a></li> <li class="page_item page-item-28"><a href="http://xxx.com/about/">about</a></li> <li class="page_item page-item-25"><a href="http://xxx.com/profile/">profile</a></li> </ul> </div> </nav>
なので、「メニュー」という所をクリック(タップ)すると、<div class=”menu”>以下の部分が表示・非表示になればいいわけです。
次にJSファイルを作ります。
jQuery(document).ready(function($){ var agent = navigator.userAgent; var list = jQuery("div.menu"); function menuslide(){ //メニュー表示非表示 jQuery("p.navtitle").click(function(){ if(jQuery(list).css("display")=="none"){ jQuery(list).slideDown("fast"); }else{ jQuery(list).slideUp("fast"); } }); } if(agent.search(/iPhone/) != -1 || agent.search(/iPod/) != -1){ menuslide(); }else if(agent.search(/Android/) != -1){ menuslide(); }else{ var replaceWidth = 650; function widthSize(){ var windowWidth = parseInt(jQuery(window).width()); if(windowWidth >= replaceWidth) { jQuery(list).css("display","block"); } else if(windowWidth < replaceWidth) { jQuery(list).css("display","none"); } } jQuery(window).resize(function(){widthSize();}); widthSize(); menuslide(); } });
これをnavtool.jsとして保存し、子テーマにjsディレクトリを作成してアップします。
まあ、名前はなんでもいいかと。
ここで注意する点はWordpressでjQueryを使う場合、$(document)や$(“div.menu”)の$をjQueryと書かないとうまく動かないという事です。
なお、Twenty Elevenでは650pxでメディアクエリーが設定されていますので、上記JSも650pxで切り替わるようにしています。
そして、header.phpのwp_head();より下の部分に以下を追記します。
<script src="<?php echo get_stylesheet_directory_uri(); ?>/js/navtool.js" type="text/javascript"></script>
ちなみに子テーマではない場合(親テーマそのものを弄ってるなど)は
<?php echo get_stylesheet_directory_uri(); ?>
の部分を
<?php echo get_template_directory_uri(); ?>
にすると良いです。
次にCSSを設定します。
CSSファイルの真ん中より下あたり、メディアクエリーが始まる部分、
/* =Responsive Structure ----------------------------------------------- */
の下に以下を追記。
@media screen and (min-width: 650px) { p.navtitle { display: none; } }
そして、650pxで切り替えてるところ、
@media (max-width: 650px) { /* @media (max-width: 650px) Reduce font-sizes for better readability on smaller devices */
の部分に以下を追記。
p.navtitle { color: #fff; dispaly: block; cursor:pointer; line-height:1.4; font-size: 12px; font-weight:bold; padding: 1.625em 0 0; } #access div { margin: 0; } #access ul { margin: 0; } div.menu { height: auto; width: 100%; display: none; } div.menu ul { width: 100%; } div.menu ul li { float: none; background: #222; width: 100%; padding: 0; text-align: left; } div.menu ul li a { border-bottom: solid 1px #666; } }
と言うか、Bootstrapふうにはなってないですねw
タイトルに偽りありですw
ちなみにBootstrapではボタンのようになっていますが、画像は使わないでCSSで定義してるようです。
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </a>
カラのspanタグで三本線を描き、リンクボックスをCSSで装飾しているようですね~。
まあ、おいおい変更していきます(・∀・)
(wp_nav_menu()でいろいろ出来そうなのですが、よくわかんないので今回はパスですw)