以前「Simplicity」の固定表示されるモバイルメニューを、スクロールで非表示する方法をご紹介いたしました。
今回はPCのヘッダーをスクロールで固定、または非表示にしてみたのでご紹介いたします。
js
下記のjsを「slide-header.js」などとして、「Simplicity」の子テーマにアップロードします。
var startPos = 0; jQuery(window).scroll(function() { var currentPos = jQuery(this).scrollTop(); if (currentPos > startPos) { if (jQuery(window).scrollTop() >= 135) { jQuery("#header").css("top", "-135px"); } } else { jQuery("#header").css("top", 0 + "px"); } startPos = currentPos; });
「135」という数値はヘッダーの高さとなります。
footer-insert.php
子テーマの「footer-insert.php」に下記の記述をします。
<?php if(!is_mobile()): ?> <script type="text/javascript" src="<?php echo get_stylesheet_directory_uri(); ?>/slide-header.js"></script> <?php endif; ?>
「!is_mobile」により、PCにのみ「slide-header.js」が読み込まれます。
css
style.css
子テーマの「style.css」に下記のスタイルを記述をしました。
#header { position: fixed; z-index: 9999; top: 0; left: 0; width: 100%; padding: 15px 0; transition: 0.3s; background: #FFF; } #navi { margin-top: 135px; }
「transition: 0.3s;」でヘッダーのスライドをある程度滑らかにしています。「margin-top: 135px;」でメニューの位置を調整しています。
mobile.css
子テーマの「mobile.css」に下記のスタイルを記述しました。
#header { position: static; z-index: auto; top: auto; left: auto; width: auto; padding: 0; transition: none; background: none; } #navi { margin-top: 0; }
「style.css」で記述したスタイルはモバイルの方にも影響があるので、打ち消す記述をします。
動作確認
ページ途中で上にスクロールすると、ヘッダーがスライドで表示され、固定されます。
まとめ
- ヘッダー固定、非表示用の「slide-header.js」を作り、子テーマの「footer-insert.php」に読み込ませる。
- ヘッダー固定、メニュー位置調整用のスタイルを作り、子テーマの「style.css」に記述する。
- モバイル表示の影響を防ぐために「mobile.css」に打ち消す記述をする。
ヘッダーはスクロール時に完全に固定しようかどうか迷ったのですが、記事を読むときにずっと画面領域が占有されるのが気になり、モバイルと同じ動きにしました。
ヘッダーを半固定化したメリットとしては、訪問ユーザーにとってはサイト名のクリックである程度トップページへの遷移が任意にできること、運営者にとってはSNSボタンでフォロー率が多少アップすることの2点になります。
メニューも一緒に半固定化しようと思ったのですが、メニューまで含めると半固定とはいえ、画面領域が結構な範囲で占有されてしまうので見送りました。
ヘッダーとメニューの役割について再考させられた実装でした。
コメント