Amazonで商品を見る セール会場へ

SWELL│スマホ表示で「上スクロール時のみヘッダー表示」にする方法

SWELLテーマを使ってスマホサイトを作成する際、「ヘッダーは普段は非表示にして、上スクロール時のみ表示させたい」というケースがあります。

スクロール中の本文表示領域を広げたい場合に、ヘッダーの表示を切り替える方法です。

本記事では、JavaScriptとCSSを用いてその動きを実現する方法を解説します。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

SWELLのスマホ表示で「上スクロール時のみヘッダー表示」にする方法

  • スマホ表示(959px以下)限定
  • 下にスクロールしている間はヘッダーを非表示
  • 上にスクロールするとヘッダーが出現

以下のコードを挿入するとSWELLのスマホ表示で「上スクロール時のみヘッダー表示」にできます。

CSS

まずはCSSです。

このコードは959px以下で適用し、CSSを追加CSSか子テーマのstyle.cssの一方へ貼り付けます。

@media (max-width: 959px) {
  #header {
    position: sticky;
    top: var(--waza-admin-bottom, 0px);
    z-index: 1000;
    transition: transform .3s ease;
  }
  #header.waza-header-hidden { transform: translateY(calc(-100% - var(--waza-admin-bottom, 0px))); }
  #header:focus-within, html[data-spmenu="opened"] #header { transform: none; }
}
@media (prefers-reduced-motion: reduce) { #header { transition: none; } }

JavaScript

続いてJavaScriptです。

以下のPHPを、バックアップした子テーマのfunctions.phpかCode SnippetsのPHPスニペットの一方へ追加します。

JavaScript欄へ貼る場合はscriptタグ内だけを使用し、PHPの登録部分を混ぜないでください。

add_action('wp_footer', function () { ?>
<script>
(() => {
 const init = () => {
  const header = document.getElementById('header');
  if (!header) return;
  const mobile = window.matchMedia('(max-width: 959px)');
  let lastScroll = Math.max(0, window.scrollY);
  function reset() {
    header.classList.remove('waza-header-hidden');
    const bar = document.getElementById('wpadminbar');
    header.style.setProperty('--waza-admin-bottom', Math.max(0, bar ? bar.getBoundingClientRect().bottom : 0) + 'px');
    lastScroll = Math.max(0, window.scrollY);
  }
  mobile.addEventListener('change', reset);
  header.addEventListener('focusin', reset);
  window.addEventListener('scroll', function () {
    const bar = document.getElementById('wpadminbar');
    header.style.setProperty('--waza-admin-bottom', Math.max(0, bar ? bar.getBoundingClientRect().bottom : 0) + 'px');
    const currentScroll = Math.max(0, window.scrollY);
    if (!mobile.matches) { reset(); return; }
    if (currentScroll <= header.offsetHeight || header.contains(document.activeElement) || document.documentElement.getAttribute('data-spmenu') === 'opened') {
      header.classList.remove('waza-header-hidden');
    } else if (currentScroll < lastScroll) {
      header.classList.remove('waza-header-hidden');
    } else if (currentScroll > lastScroll) {
      header.classList.add('waza-header-hidden');
    }
    lastScroll = currentScroll;
  }, { passive: true });
  reset();
 };
 if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', init, { once: true });
 else init();
})();

</script>
<?php });

以上、コードを挿入しましたら、スマホで動作を確認しましょう。

下記のサイトで確認できます。

設定・確認と戻し方

カスタマイザーのスマホ用ヘッダー固定をオフにし、このコードとの二重制御を避けます。

sticky配置で元のヘッダー領域を残すため、fixed配置のように本文の先頭をヘッダーの下へ押し込める余白を別途用意する必要はありません。

ページ先頭、上方向へのスクロール、ヘッダー内にフォーカスがある状態、SWELLメニューを開いている状態では表示を保ちます。

下方向に進むと隠れ、PC幅に変更すると非表示クラスを解除します。

ログイン時の管理バー位置も参照しますが、今回の実ブラウザー確認はログアウト時のメニュー・スクロール・PC幅への変更までです。

解除する場合は追加したPHPとCSSを取り除き、以前のSWELLヘッダー固定設定へ戻します。

公開後はWP Rocketやブラウザーのキャッシュを必要に応じて更新し、掲載コードが反映された状態で試してください。

スマホのスクロールヘッダーと開いたSWELLメニュー
ヘッダーを保ったままメニューを開いた状態(2026年10月2日撮影、WordPress 7.1.2 / SWELL 2.19.0の隔離環境)。

まとめ

スクロール中の本文表示領域を広げたい場合に、ヘッダーの表示を切り替える方法です。

SWELLのスマホ用固定ヘッダーをオフにした構成を、検証の対象としています。

ヘッダーの挙動をカスタマイズしたい方は、ぜひ導入してみてください。

  • URLをコピーしました!

実装を任せたい方へ

SWELLのカスタマイズ代行

記事のコードをそのまま使うのが不安な場合や、サイトに合わせた調整が必要な場合は当社が実装します。1時間 ¥8,000〜(税込)。テーマ更新に強い書き方で納品します。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次