scroll
shrinking header / sticky header shrink
スクロールすると固定ヘッダーが低くなり、ロゴも小さくなってコンテンツの視界を広げる実務の超定番。閾値・縮小率・遷移時間の3つの数値がほぼすべてを決める。
02 — Prompt template
03 — Params
threshold(発火するスクロール量 px) — 範囲 20〜200 / 初期 80
縮み始めるスクロール量。60〜100pxが定番。小さすぎると最上部でチラつく。ratio(縮小後の高さ比) — 範囲 0.4〜0.9 / 初期 0.6
縮小後の高さ ÷ 元の高さ。0.6前後が自然。0.5を切るとナビが窮屈になる。duration(切り替えの時間 s) — 範囲 0.15〜0.8 / 初期 0.3
0.25〜0.35sが自然。0.5sを超えるとスクロールのたびにもたつく。
04 — Vocab
sticky / fixed — 固定方法の2択。stickyはDOMの流れに残るため本文の余白調整が不要。fixedは本文にヘッダー分のpaddingが要る。
ヒステリシス — 発火の閾値と解除の閾値をずらすこと。境界上でスクロールが止まったときに縮む・戻るを繰り返すチラつきを防ぐ。
auto-hide header — 下スクロールで隠れ、上スクロールで現れる変種。smart header / hide on scroll とも呼ぶ。方向判定はscrollYの差分の符号で行う。
2値切り替え — スクロール量に連続で追従させず、閾値でクラスをON/OFFする方式。実装が単純で挙動が安定し、CSS transitionに任せられる。
05 — NG → OK examples
NG
言い方: 「「スクロールしたらヘッダーを小さくして」」
なぜNG: 閾値も縮小率も未指定。スクロール量に比例して高さを毎フレーム再計算するガタつく実装や、境界の上でスクロールが止まると縮む・戻るをチラチラ繰り返す実装が返ってくる。
OK
言い方: 「「shrinking headerを実装。scrollY 80pxで発火・戻りは60px(ヒステリシス)、高さ0.6倍・ロゴはscaleで縮小、0.3s ease、閾値での2値クラス切り替え」」
なぜOK: 閾値・縮小率・時間に加えて「2値のクラス切り替え」まで指定している。連続追従かON/OFFかで実装が根本から変わり、安定するのは後者。
