スクロールしても記事タイトルをずっと画面に固定表示するカスタマイズ(V3用)
公開日 更新日 2014/11/26
WordPressのSTINGERテンプレートに対して、記事タイトルを含むヘッダ部分をブラウザに追従表示させるカスタマイズをしてみました。
これはWEB検索で「固定ヘッダ」とか「Sticky表示」などというように表記されています。
本記事では、このサイトで実現させたSTINGERへの固定ヘッダの設定方法についてまとめたいと思います。
Information
この記事はSTINGER V3のためのカスタマイズです。同じことをV5でもやってみましたので、よかったらこちらの記事もご覧ください。
なぜ固定ヘッダにさせたい?
ブログ記事は長くなると当然のことですが、スクロールしないと全部見ることが出来ないのですが、ずっと下の方にスクロールしていくと、これがどういうタイトルの記事だったか忘れてしまうことがあります。
また私はGoogle Chromeを使っているのですが、タブに表示されたページタイトルも文字数の関係からマウスオーバーさせたポップアップ画面を出さないとすべてを一度に表示できません。
そのため、常に記事タイトルを表示させたいので固定ヘッダの仕掛けを活用しようと思いました。
改善方法の検討
STINGERテンプレートではサイドバーにある「スクロール広告用」表示にてブラウザ画面をスクロールしても追従してくる仕掛けが既にあります。
ちょうどこれを参考にして、同様に記事タイトルに対してもブラウザへ追従させます。
仕掛けとしては、固定ヘッダ用のボックス要素(DIV)に対して、次の動作をさせるJavascript処理で実現します。
- ブラウザがページ読み込み直後のような最上段を表示中には非表示設定にする。
- 本物?の方の記事タイトルが画面外に移動したら、固定表示用のボックス要素を表示設定にする。
変更内容
[外観] -> [テーマ編集]より、次の2つのファイルを修正します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#wrap #wrap-in #fixedTitle { //★ここから追加 position: fixed; top: 0px; width: 720px; padding: 5px; background-color: #f9f9f9; border-bottom: 1px solid #ccc; box-shadow: 0px 3px 3px #999; color: #666; font-size: 12px; white-space: nowrap; display: none; z-index: 9999; } //★ここまで追加 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
<div id="wrap"> <div id="wrap-in"> <!--★ここから追加★--> <?php if( is_single() ) { ?> <div id="fixedTitle"> <?php the_title(); ?> </div> <script type="text/javascript"> (function($) { $(document).ready(function() { var w = $(window); var blogbox = $(".blogbox"); var fixedTitle = $("#fixedTitle"); var bottom = blogbox.offset().top + blogbox.height(); var isSticky = false; var fixedTitleAction = function () { if(w.scrollTop() > bottom){ if(isSticky == false){ fixedTitle.slideDown("fast"); isSticky = true; } } else { if(isSticky == true){ fixedTitle.slideUp("fast"); isSticky = false; } } }; w.on('load', fixedTitleAction ); w.on('scroll', fixedTitleAction ); }); })(jQuery); </script> <?php } ?> <!--★ここまで追加★--> <div id="main"> |
変更内容の補足
ヘッダー(header.php)の変更内容5行目にある「is_single()」はWordPressが提供する関数で、表示しているページが単一記事を指すページかどうかを判定するものです。
ヘッダーページは月ごとやカテゴリなど、すべてのページの先頭にくっつくものなので単一ページ以外で動いてしまうと困る処理について、is_single()で判定するとよいでしょう。
ヘッダー(header.php)の変更内容9行目以降はjQueryを活用した処理でSTINGERのスクロール広告用と流れは同じです。
固定ヘッダの実現方法については、こちらの記事(現場でかならず使われているWordPressデザインのメソッド)で読んだ書籍でも紹介されていました。
レスポンシブ広告
関連記事
-
パンくずリストの最後の”>”を削除するカスタマイズ
STINGERテンプレートだと、パンくずリスト(ブレッドクラム / トピックパス …
-
広告フロートの動きがおかしい問題の回避方法
WordPressテーマSTINGERの サイドバーにある「スクロール広告用」は …
-
「続きを読む」ボタンのデザインをカスタマイズ
WordPressの醍醐味の一つ?であるだろうカスタマイズに着手しました。 巷で …
-
記事の幅を広げるカスタマイズ(V3用)
STINGERをインストールした状態だと、記事の幅が550pxになっています。 …
-
パンくずリストをもっとカッコよくする
STINGERテンプレートは、WordPressサイトのテーマとし …
-
WordPressテーマをSTINGER5にバージョンアップ
STINGER配布サイトにて、STINGERのV5メジャーアップのアナウンスを発 …
-
記事一覧に表示する各記事の概要を「続きを読む」タグまでにする
Information この記事はSTINGER v3用のカスタマイズ方法です。 …
-
記事の幅を広げるカスタマイズ(V5用)
以前STINGER v3にて、こちらの記事(記事の幅を広げるカスタマイズ)で記事 …
-
記事一覧に表示する各記事の抜粋を綺麗に整形表示する
STINGERのホーム画面や月まとめ等のアーカイブ系のページに表示される記事一覧 …
-
CSSファイル数を減らしてページ表示時間を最適化
STINGERテンプレートの場合、ダウンロード対象のCSSファイルは2つあります …