overscrollBg / COverscrollBg
Safari(特に iOS)のオーバースクロール(ラバーバンド=端で弾む挙動)でページ上下端に露出する余白を、任意の背景色で塗りつぶす。
fixed の擬似要素(::before / ::after)を viewport の上下に 1枚ずつはみ出させて常時待機させ、バウンドしても地の色が見えないようにする仕組み。
使い方は2通り。関数版 overscrollBg() は JS で <body> にマークアップとスタイルを差し込む(no-build 環境や WordPress の main.js から使う場合向け)。コンポーネント版 <COverscrollBg> はレイアウトに1つ置くだけの宣言的な方法(JS不要)。
効果が見えるのは主に Safari / iOS のラバーバンドスクロール時で、他ブラウザでは見た目に影響しない。
仕組み
viewport の外側(上下)に、背景色で塗った fixed のバーを待機させておく。Safari のバウンドで viewport がずれても、この待機バーが見えるため地の色が露出しない。
オーバースクロール領域の塗り
下は概念図。上下の色帯が :before / :after(通常時は画面外に隠れている)、中央が実際の viewport。
コードを見る
.for_safari::before,
.for_safari::after {
position: fixed;
left: 0;
width: 100%;
height: var(--overscroll-height, 200px);
background-color: var(--overscroll-color, #fff);
z-index: var(--overscroll-z, 99999999);
pointer-events: none;
content: '';
}
.for_safari::before { top: calc(-1 * var(--overscroll-height, 200px)); } /* 画面上端の外 */
.for_safari::after { bottom: calc(-1 * var(--overscroll-height, 200px)); } /* 画面下端の外 */ overscrollBg(関数)
JS でマークアップとスタイルを差し込む方式。ビルドツールの無い環境や、テーマの main.js から呼びたい場合に使う。戻り値の関数で撤去できる。
呼び出し例
ページ読み込み時に一度呼ぶだけ。色をサイトの地の色に合わせて指定する。
この効果は Safari / iOS のラバーバンドスクロール時のみ視認できるため、ページ内に インタラクティブなプレビューは用意していない。実機(iOS Safari)で上端・下端を 引っ張って確認する。
コードを見る
import { overscrollBg } from 'form-snippets';
// 地の色に合わせて塗る(既定は白・上下200px)
overscrollBg({ color: '#f3f2ed' });
// 解除する場合は戻り値の関数を呼ぶ
const stop = overscrollBg();
// stop(); COverscrollBg(コンポーネント)
宣言的な方法。共通レイアウト(Layout.astro など)の <body> 直下あたりに1つ置くだけ。JS不要で SSR 出力される。
レイアウトに1つ置くだけ
color にサイトの地の色を渡す。height / zIndex も Props で調整できる。
マークアップ(.for_safari)と CSS を内包する宣言的コンポーネント。
関数版と同じ塗りを、JSを書かずに設置できる。
コードを見る
---
import COverscrollBg from 'form-snippets/COverscrollBg.astro';
---
<body>
<COverscrollBg color="#f3f2ed" />
<slot />
</body>