スマホでもナビゲーションを画面上部に固定する方法

Twenty Seventeenでは、PCのレイアウトだと、下にスクロールすると、画面上部にナビゲーションが固定されるようになっています。

↓ 下にスクロールすると画面上部に貼り付く。

スマホのナビゲーションは、下にスクロールすると上に流れて行ってしまい、固定されません。

スマホのナビゲーションも固定する方法です。

手順

追加CSSに以下を追加

.site-navigation-fixed.navigation-top {
	bottom: auto;
	position: fixed;
	left: 0;
	right: 0;
	top: 0;
	width: 100%;
	z-index: 7;
}

JavaScriptを修正

・本体を書き換える場合

以下のファイルを編集する。

wp-content/themes/twentyseventeen/assets/js/global.js

adjustScrollClass関数を以下のように編集する(赤文字部分を追加)。

	// Make navigation 'stick'.
	function adjustScrollClass() {

		// Make sure we're not on a mobile screen.
		if ( 'none' === $menuToggle.css( 'display' ) ) {

			// Make sure the nav isn't taller than two rows.
			if ( navIsNotTooTall ) {

				// When there's a custom header image or video, the header offset includes the height of the navigation.
				if ( isFrontPage && ( $body.hasClass( 'has-header-image' ) || $body.hasClass( 'has-header-video' ) ) ) {
					headerOffset = $customHeader.innerHeight() - navigationOuterHeight;
				} else {
					headerOffset = $customHeader.innerHeight();
				}

				// If the scroll is more than the custom header, set the fixed class.
				if ( $( window ).scrollTop() >= headerOffset ) {
					$navigation.addClass( navigationFixedClass );
				} else {
					$navigation.removeClass( navigationFixedClass );
				}

			} else {

				// Remove 'fixed' class if nav is taller than two rows.
				$navigation.removeClass( navigationFixedClass );
			}
		} else {
			headerOffset = $customHeader.innerHeight();
			if ( $( window ).scrollTop() >= headerOffset ) {
				$navigation.addClass( navigationFixedClass );
			} else {
				$navigation.removeClass( navigationFixedClass );
			}
		}
	}

・子テーマの場合

本体を直接編集すると手っ取り早いのですが、テーマのアップデートで修正が上書きされて、元に戻ることがあります。アップデートにも対応するには、子テーマで処理を上書きするのがよいです。

子テーマを作って、親テーマ(TwentySeventeen)から子テーマに assets/js/global.js をコピーして、子テーマ側で、上のように必要個所を編集します。

解説

PCの画面幅のときナビゲーションが固定されるのは、以下のCSSが効いているため。

@media screen and (min-width: 48em) { /* ← 画面が広いときに適用 */
	/* 略 */

	.site-navigation-fixed.navigation-top {
		bottom: auto;
		position: fixed;
		left: 0;
		right: 0;
		top: 0;
		width: 100%;
		z-index: 7;
	}

	/* 略 */
}

メディアクエリなしで追加CSSに書くことで、どの画面の幅でも適用されるようになります。

.site-navigation-fixed というクラスは、JavaScriptによって付与されています。

ヘッダ部分が隠れるまで画面を下にスクロールしたときにCSSのクラス(.site-navigation-fixed)が追加され、上にスクロールすると削除されます。

この処理がスマホの画面幅のときは除外されていて、PCの画面幅のときしか実行されないので、スマホの場合も処理をするようにしました。また、ヘッダやメニューの高さの計算がPC用になっているので、その部分も調整しています。

トップのコーヒーやサンドイッチの画像の変え方、消し方

TwentySeventeenの初期状態では、トップページの各セクションの背景に、コーヒー画像やサンドイッチ画像が入っています。

これをどうやって変更したり、削除したりできるのかというと、

お問い合わせや会社概要など、各セクションに対応する固定ページがあるので、その固定ページのアイキャッチ画像を変更することで対応できます。