運用と注意点

ブラウザサポート、polyfill、prefers-reduced-motion、パフォーマンス、デバッグ、 SEO や A11y への配慮まで。

ブラウザサポート(2026 年初頭)

ブラウザ対応状況
Chrome / Edge115+ 完全対応
Opera完全対応
Safari段階的対応中(基本は OK)
Firefoxフラグ付き / 標準対応進行中
iOS Safari段階的

最新情報は caniuse.com で確認。

非対応環境への対応

1. 進化的強化(既定)

非対応ブラウザでは静的に表示される設計に。アニメは「あったらラッキー」程度の演出に留める。

.reveal {
  opacity: 1;             /* 既定(非対応では常に表示) */
}
@supports (animation-timeline: scroll()) {
  .reveal {
    opacity: 0;
    animation: reveal linear both;
    animation-timeline: view();
    animation-range: entry 0% cover 30%;
  }
}

2. polyfill

どうしても全環境で動かしたいなら scroll-timeline polyfill を導入:

npm install scroll-timeline-polyfill

prefers-reduced-motion

必須。OS で「視差効果を減らす」を有効にしているユーザは VR 酔い等の問題を抱えている。

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
  }
  .reveal {
    opacity: 1 !important;
    transform: none !important;
  }
}

パフォーマンス

動かすプロパティ

大量要素

will-change

.reveal {
  will-change: transform, opacity;
}

付けすぎ注意。アニメ完了後に外すのが理想。

レイアウトシフト(CLS)

デバッグ

SEO / アクセシビリティ

動的なコンテンツ

iOS Safari の注意点

polyfill のチューニング

典型的なバグ

症状原因
初期で見えてしまうopacity: 0 の初期値漏れ / @supports 未使用
動かないscroll の対象が overflow:hidden / 高さ不足
fill-mode 抜けで戻るboth または forwards を付ける
レイアウトシフトheight や padding を動かしている
名前が解決しないtimeline-scope を親に

本番チェックリスト

関連リソース

本セクションの総まとめ

  1. scroll() でスクロール量、view() で要素のビューポート進入
  2. animation-range で実際の発動範囲を絞る
  3. 名前付きタイムラインで離れた要素同士を連動
  4. JS / WAAPI から動的に
  5. 非対応ブラウザは進化的強化 / polyfill
  6. Reduce Motion を絶対忘れない
最後に

scroll-driven animations は「JS なしでスクロール演出」という長年の夢。 すでに実用域に入っている。今後は GSAP ScrollTrigger 並みの機能が CSS だけで書けるようになる流れ。 先取りで触っておくとアドバンテージになる。