scroll-stateとは?CSSだけで現在スナップ中の要素を検知する最新テクニック
スポンサーリンク

こんにちは。静岡県浜松市でWEBデザイナーをしています小瀧です。
カルーセルや横スクロールUIを作るとき、これまで当たり前のように書いていた処理があります。

「今どの要素が表示されているかを判定するJavaScript」です。

スクロールイベントを監視し、位置を計算し、インデックスを算出してクラスを付け替える。
実装も少し面倒ですし、パフォーマンス面の配慮も必要でした。

しかし今、CSSだけでそれが可能になりつつあります。

scroll-stateを使えば、「現在どの要素にスナップしているか」をCSSが直接検知できます。
カルーセルの「現在表示中の要素だけハイライト」も、JavaScript不要で実装可能です。

今回はこの新しい仕組みについて、実務目線で整理していきます。

scroll-stateとは

scroll-stateは、スクロールコンテナ内の要素が「どの状態にあるか」をCSSで検知できる仕組みです。

特に相性が良いのがscroll-snapと組み合わせたレイアウトです。

scroll-snapを使えば、スクロール時に要素がピタッと止まるUIを作れます。
scroll-stateは、その「今スナップしている要素」をCSSで判定できるのです。

なぜ革命的なのか

従来の実装はこうでした。

  1. scrollイベントを監視
  2. スクロール位置を取得
  3. 表示中要素を計算
  4. activeクラスを付与

scroll-stateを使えば、これらが不要になります。

  • JavaScript不要
  • イベント監視不要
  • パフォーマンス改善
  • 実装がシンプル

UI状態をCSSだけで完結できるのが最大の強みです。

スポンサーリンク

基本構造(scroll-snapとの組み合わせ)

まずはコンテナにscroll-snapを設定します。

<div class="carousel">
 <div class="item">1</div>
 <div class="item">2</div> 
 <div class="item">3</div> 
</div>

 

CSSは以下のように記述します。

 
.carousel { 
 display: flex; 
 overflow-x: auto; 
 scroll-snap-type: x mandatory; 
} 
.item { 
 flex: 0 0 100%; 
 scroll-snap-align: center; 
}

ここまでは従来のscroll-snap実装です。

scroll-stateで現在表示中を検知

scroll-stateを使うと、スナップ中の要素に対してスタイルを当てられます。

 
.item:scroll-state(active) { 
 transform: scale(1); 
 opacity: 1; 
} 
.item { 
 transform: scale(0.9); 
 opacity: 0.5; 
 transition: 0.3s; 
}

これにより、現在スナップ中の要素だけが拡大表示されます。

JavaScriptによるクラス制御は一切不要です。

実務での活用シーン

See the Pen
Untitled
by 小瀧賢 (@ekwwawpb-the-styleful)
on CodePen.

scroll-stateは次のような場面で強力です。

  • カルーセルの現在要素ハイライト
  • スナップ型LPセクション
  • 縦スクロール型ストーリーテリング
  • ステップUIの進行表示

特に「現在地の視覚化」が必要なUIでは、コード量を大幅に削減できます。

注意点

scroll-stateはまだ発展途上の仕様です。

  1. ブラウザ対応が限定的
  2. 仕様変更の可能性がある
  3. フォールバック設計が必要

そのため、本番導入時は段階的適用が現実的です。

まとめ

scroll-stateは、スクロール連動UIの設計を大きく変える可能性を持っています。

これまでJavaScriptで制御していた「現在表示中要素の判定」が、CSSだけで完結する。
実装はシンプルになり、パフォーマンスも改善されます。

スクロール演出を多用するサイトを制作している方にとっては、間違いなくチェックすべき機能です。
CSSの進化は、まだまだ止まりません。

 

satokotadesignキャンペーン実施中!

浜松市の飲食店限定|ホームページ無料作成サービス
ぶっちゃけ無料相談会!ホームページ制作の悩み話してみませんか?
satokotadesign4周年記念キャンペーン

静岡県浜松市でホームページ制作ならsatokotadesign
静岡県浜松市でホームページ制作ならsatokotadesign

スポンサーリンク
おすすめの記事