[WordPress]ナビメニューを最上部に固定する方法

このサイトはWordPressにテーマはSimplicityを使っていますが、ナビメニュー(グローバルナビ)が標準で設置できるのが気にいっています。

改造前

現状のナビメニュー

使っていると更に欲が出てきて、ナビメニューをブラウザ内の最上部に移動し、かつスクロールしてもナビメニューが隠れないようにしたくなりました。

今回そのカスタマイズに成功しましたので、その方法を紹介します。WordPressのテーマはSimplicityですが、それ以外の場合でも参考になると思います。

ナビメニューを更にこうしたい

1.一番上部に配置したい。そのわけは

Googleアドセンスの広告を上部にも配置したい

WordPressに移行してからGoogleアドセンスを導入しましたが、 押してもらえる可能性が高い画面上部にも広告を配置したいところです。

サブメニューが広告近くにかかると違反

ところが、当サイトのようにサブメニューがあると、広告を上部に配置しづらいという問題があります。 理由はサブメニューの近くに広告があると、サブメニューと間違って広告を押してしまう可能性があるので、ポリシー違反となるからです。

なので、ナビメニューをできるだけ上の方向に移動したいのです

2.ナビメニューの体裁をもっと良くしたい

メニュー自体はbodyの幅で、バックは幅いっぱい広げたい

一番上に配置したならメニューの帯は画面幅いっぱい広く表示した方がかっこいいと思います。各メニュー項目は従来どおりbodyの上に配置したい。

常に上部に固定表示したい

画面をスクロールしてもナビメニューが隠れないようにしたい。ブログタイトルは必要ないが、ナビメニューは常にあった方が良い。

サブメニューがあることをわかりやすくしたい

意外と、一見サブメニューがあることがわからないらしいので改善したい。

ナビメニューのカスタマイズ方法

1.参考サイト

当サイトと同じようにSimplicityを使っていて、ナビメニューを上部に配置しているブログがあります。現役の中学生だそうで、もうこんなサイトが作れるなんてすごいですね。

変更の要点は、スタイルシートに以下を追加するとのこと。

#navi ul{
  left: 0; /*左端が切れてしまうのでその対策*/
  top: 0px; /*メニューバーを画面上部へ*/
  position: fixed; /*追尾させる*/
  z-index: 10;
}
#navi ul ul{
  top: 30px; /*サブメニュー?が画面上部とくっついてしまう対策*/
}
#header {
  margin-top: 39px;/*ヘッダーの上に空白を作る*/
}

私も早速試しましたが

  1. メニューが左寄りになる
    本来のbody幅の上に各項目を配置したい
  2. WordPressにログイン時隠れる
    WordPressダッシュボードにログイン状態では、WordPressの上部メニューでナビメニューが隠れてしまいます。

この2点を改善したいと思いました。

2.私のカスタマイズ法

上記を改善したカスタマイズ法です。下記3つのファイルを変更します。

1)header.phpの変更

親テーマホルダーにあるheader.phpをFTPソフトでPC内にコピーして変更します。
下記は変更後のheader.phpです。

  <body <?php body_class(); ?>>
    <div id="container">
      <!-- header -->
      <?php if (is_navi_visible())://ナビゲーションが表示のとき
        get_template_part('navi');//グローバルナビのためのテンプレート
      endif; ?>
      <div id="header" class="clearfix">
        <div id="header-in">
          <?php //カスタムヘッダーがある場合
          $h_top_style = '';
          if (get_header_image()){
            $h_top_style = ' style="background-image:url('.get_header_image().')"';
          } ?>
          <div id="h-top"<?php echo $h_top_style; ?>>
            <?php get_template_part('button-menu'); //モバイルメニューボタンの呼び出し?>
            <div class="alignleft top-title-catchphrase">
              <?php get_template_part('header-logo');?>
            </div>
            <div class="alignright top-sns-follows">
              <?php  if ( is_top_follows_visible() ): //トップのフォローボタンを表示するか?>
              <?php get_template_part('sns-pages'); //SNSフォローボタンの呼び出し?>
              <?php endif; ?>
            </div>
          </div><!-- /#h-top -->
        </div><!-- /#header-in -->
      </div><!-- /#header -->
      <!-- 本体部分 -->
      <div id="body">
        <div id="body-in">
  • ブログタイトル等のヘッダより先にナビメニューを記述します

4-6行目がナビメニューの表示部分ですが、下にあったのをこの位置まで前に移動します。変更はそれだけです。

変更したheader.phpをFTPで子テーマフォルダに入れます。

2)style.cssの変更

子テーマホルダーにあるstyle.cssに以下の内容を追加します。

/* ナビメニューのトップ化 */
#navi {
  width:100%; /* 幅をいっぱいに広げる*/
  position: fixed; /*位置を固定する*/
  z-index: 10; /*上に重ねる*/
}
#site-title { /*ブログタイトルとナビメニューが重ならないように*/
  margin-top: 50px;
}
  • 3行目:メニューの帯の幅をいっぱいまで広げます
  • 4行目:スクロールしても消えないように、位置を”fixed”にします

すると他の要素全体が上に上がって、ナビメニューとブログタイトルが重なりますので

  • 5行目:ナビメニューを上層(表面側)に持ってくる
  • 7-9行目:ブログタイトルの上マージンでナビメニューと重ならないようにする

という変更を追加しています。

3)mobile.cssの変更

子テーマフォルダーにあるmobile.cssに以下を追加します。

#site-title {
  margin-top: 20px;
}
  • モバイルではナビメニューがなく、上記変更によりブログタイトルの上が空き過ぎるのを調整します

3.サブメニューの項目名に▽を付ける

ついでにナビメニューにサブメニューがあることをわかりやすくするため、各メニュー名の後に「▽」を付けました。

カスタマイズが完了したナビメニュー

以上で今回のナビメニューのカスタマイズは完了です。

WordPressのダッシュボードにログインした状態ですと、以下のようになります。

カスタマイズしたナビメニュー。訪問者の方には一番上の黒いメニューは表示されません。


スポンサーリンク
  • このエントリーをはてなブックマークに追加

コメントをどうぞ

メールアドレスが公開されることはありません。

トップへ戻る