スクロール量を示すバー(CSS のみ)

アニメーション Medium #css #scroll-driven #animation-timeline #modern

JavaScript なし・CSS の animation-timeline: scroll() だけでページのスクロール進捗を可視化するバーを実装。Intersection Observer 不要。

▶ プレビュー

解説

ページ上部に固定された細いバーが、スクロール量に応じて左から右へ 0% から 100% まで伸びる「読み進み度」インジケーターです。注目すべきは、これを JavaScript のスクロールイベント監視なしで実現している点で、CSS の animation-timeline:scroll() を使い、アニメーションの進行をページのスクロール位置そのものに結び付けています。バーは transform:scaleX() で横方向に拡大するため、再描画の負荷が小さく滑らかに動きます。

長い記事やドキュメント、利用規約ページなど、読者が「あとどれくらいで読み終わるか」を知りたいコンテンツに向きます。従来はスクロール量を JavaScript で常時計算する必要があり、処理が重くなりがちでしたが、この方式はブラウザがスクロールと描画をまとめて最適化してくれるため軽快です。

カスタマイズと注意点

  • バーの色はグラデーションの値を、太さは height を変えれば調整できます。
  • バーを下端に置きたいなら topbottom に変えます。
  • animation-timeline はまだ対応ブラウザが限られます。未対応環境ではバーが出ないだけで本文の閲覧に支障はないため、装飾として安全に足せます。動きに敏感な人へ配慮するなら prefers-reduced-motion でバーを隠す指定を加えると親切です。

よくある質問

JavaScript を使わずに進捗を出せるのですか?
はい。CSS の animation-timeline:scroll() を使うと、アニメーションの進行をスクロール位置に直接連動させられます。スクロールイベントを JavaScript で監視する必要がなく、ブラウザが描画ごと最適化するため軽快に動きます。
どのブラウザで動きますか?
スクロール連動アニメーションに対応した比較的新しい Chrome 系ブラウザなどで動作します。未対応のブラウザではバーが表示されないだけで、ページ本体の閲覧には影響しないので、装飾的な機能として安心して使えます。
inspired by 2026 modern CSS / Web APIs / 追加日:2026-05-13
← すべてのスニペットへ戻る