技術
animation-range を cover にすると、ページの末尾で完走しない
スクロールに合わせて要素を現す演出を、JS を使わず animation-timeline: view() だけで組みました。ページのいちばん下の要素だけ、薄いまま終わります。
何が起きたか
最初はこう書いていました。
animation-timeline: view();
animation-range: entry 0% cover 28%; /* ← ページの末尾で完走しない */3つあるページのうち、いちばん短いページで気づきました。最後の節が画面いっぱいに見えているのに、薄いままなのです。計算値を拾うとこうでした。
端末画像 0.63
見出し 0.59
箇条書き 0.47 ← 画面に入りきっているのに半分以下
手前の節 0.93 / 0.88 (下へ行くほど薄い)理由 —— cover はスクロールし「過ぎる」量で進む
cover は、要素が画面を通り過ぎていく量で進みます。ということは、ページのいちばん下にある要素には、その量ぶんのスクロールが残っていません。 下へ行くほど薄くなるのはそのためです。
長いページでは目立ちません。ページが短いほど、そして要素が下にあるほど強く出ます。
直し方 —— 終わりを entry 100% にする
animation-timeline: view();
animation-range: entry 0% entry 100%; /* 全体が画面に入りきったら完了 */entry 100% は「要素の下端が画面の下端に達する」、つまり全体が画面に入りきった時点です。行き過ぎる量に依存しないので、ページの末尾にあっても必ず完走します。
「画面に入りきったものは必ず不透明」という、読み手の側から見て素直な約束にもなりました。
検証は、実際にホイールを回すこと
ここがいちばんの落とし穴でした。window.scrollTo() では検証できません。animation-timeline: view() の値が更新されず、常に 1 に見えます。
自動で確かめようとして「直った」と判断しかけました。実際に指とホイールで送るまで、壊れたままだと分かりません。