スクロールに連動して動かす
Scroll-driven animations
スクロール量そのものを動きの時間軸にする。写真がゆっくりずれる演出や読み進みバーが、JavaScript なしで作れる。
AIへの頼み方
スクロール量に連動して、ページ上部の進捗バーが伸びるようにしてください。CSS の animation-timeline: scroll() を使い、JavaScript は使わないでください。未対応ブラウザでは @supports で静止した見た目になるようにフォールバックも入れてください。
動くデモ
右下のボタンで再生と停止を切り替えられます。動きを減らす設定の端末では停止した状態で始まります。
全画面で見る ↗最小コード
/* スクロール量そのものをアニメの時間軸にする(JSなし)*/
/* ① ページ全体のスクロール進捗バー */
.progress {
transform-origin: 0 50%;
animation: grow linear both;
animation-timeline: scroll(nearest); /* ← 時間ではなくスクロール位置で進む */
}
@keyframes grow { from { transform: scaleX(0) } to { transform: scaleX(1) } }
/* ② 要素が画面に出入りする間だけ動かす(パララックス)*/
.hero img {
animation: rise linear both;
animation-timeline: view();
animation-range: entry 10% cover 60%;
}
@keyframes rise {
from { transform: scale(1.12) translateY(10px) }
to { transform: scale(1) translateY(0) }
}
/* 未対応ブラウザ(2026-08時点の Firefox)では上のブロックごと無視される。
「動かないだけで壊れない」形に保つのがコツ。明示するならこう書く: */
@supports not (animation-timeline: scroll()) {
.progress { transform: scaleX(1) } /* 静止した見た目を用意しておく */
}
@media (prefers-reduced-motion: reduce) {
.progress, .hero img { animation: none }
} 対応状況
要フォールバック 2026年08月時点で確認
実確認では Baseline limited(Chrome 115+ / Safari 26+、Firefox は未実装。設計 §9 の想定は「新顔」だった)。未対応環境では @supports ごと無視され「動かないだけで壊れない」ので、最小コードのフォールバックを添えれば実案件で使える。2026-08-16 の親裁定で初回12項目に残し、区分は「要フォールバック」とした。
フォールバックを併記すれば実案件で使える。ただし Firefox では動かない前提で設計する。
対応状況は自動更新していません。確認日より後の変化はこのページに反映されていない場合があります。
使いどころ/避けどころ
「スクロールすると動く」を JavaScript なしで作れる。読み進み具合を示す進捗バーや、背景の写真がゆっくりずれるパララックスが、CSS だけで書ける。スクロールのたびに計算する処理を自分で書かなくて済むので、動きが滑らかで、端末が熱くなりにくい。
向くのはあってもなくても困らない演出。進捗バー、写真の軽い視差、見出しの浮き上がり。動かなくても内容が読めるものに使う。
避けたいのは、動かないと意味が通じない使い方。たとえば「スクロールすると文字が現れる」ようにすると、Firefox では文字が最後まで見えないままになる。この機能はまだ Firefox に載っていないので、動かない人がそれなりにいる前提で考える。
もうひとつ、同じ画面で何本も動かさない。進捗バー1本と写真1枚くらいまで。連動する要素が増えるほど、スクロールが重く感じられる。
書き方としては、@supports で囲って「対応していれば動く、していなければ静止した見た目」に分けておくのが安全になる。この分け方さえしておけば、対応が広がったときに何も直さなくていい。