ヘッダースクロールシャドウ

https://forum.ghost.org/ のフォーラムをスクロールすると、ヘッダーに影が表示されます。彼らは以下の CSS を使用しているようです。

.d-header {
    height: 56px;
    padding: 0;
    border-bottom: 1px solid #e5eff5;
    background: rgba(255,255,255,0.97);
    box-shadow: none;
    transition: all 0.4s ease;
}

スクロール時の CSS:

.d-header.scrolling {
    box-shadow: 8px 14px 38px rgb(39 44 49 / 4%), 1px 3px 8px rgb(39 44 49 / 4%);
    transition: all 0.2s ease;
}

上記の CSS を自分のフォーラムに追加しても、同じ結果が得られません。

スクロール時にヘッダーに .scrolling クラスを追加するカスタム JavaScript が追加されました。Discourse はデフォルトではこれを行いません(見た目は素敵ですが)。

「いいね!」 4

この CSS クラスをデフォルトで適用したいです。とても素敵だと思います。

テーマのヘッダータブに、以下のようなコードを追加できます。

<div class="header-anchor"></div>

<script type="text/discourse-plugin" version="0.8">
if (!"IntersectionObserver" in window) return;

const { on } = require("discourse-common/utils/decorators");

const stickyClass = "sticky";

api.modifyClass("component:site-header", {
  @on("didInsertElement")
  stickyHeaderCheck() {
    const anchor = document.querySelector(".header-anchor");
    const header = this.element;

    new IntersectionObserver(entries => {
      if (!entries[0].isIntersecting) {
        header.classList.add(stickyClass);
      } else {
        header.classList.remove(stickyClass);
      }
    }).observe(anchor);
  }
});
</script>

これにより、ヘッダーのラッパーに sticky クラスが追加され、スクロールしてヘッダーが上部に固定された際に、カスタム CSS を適用できるようになります。

.d-header {
  box-shadow: none;
  transition: box-shadow 0.3s ease-in-out;
  will-change: box-shadow;
  .sticky & {
    box-shadow: 0 3px 5px rgba(57, 63, 72, 0.3);
  }
}
「いいね!」 5

感謝しています。本当にありがとうございます。

「いいね!」 1

これに気づきました。このコードにより、PWA アプリケーションの実行が停止します。

この問題をデバッグするために、もう少し詳細が必要です。

コードを削除しても、PWA アプリケーションは動作しますか?
テーマの header タブに追加しましたか?
テストに使用しているデバイスや OS は何ですか?

「いいね!」 1

はい、テーマヘッダーを追加しました。コードを削除しても PWA は引き続き動作します。公式インストール手順に従って Ubuntu 20.04 がインストールされたサーバーで、ライブサイト、Android 11 デバイス、および PC の Chrome ブラウザでテストしました。