スクロール時に表示領域に画面がくっつくようになる処理をCSSだけで実現する「scroll-snap」

この記事の要約
- 親要素に
scroll-snap-type: mandatory;を指定する - 子要素に
scroll-snap-align: start;を指定する widthやheightで幅の指定をする- 親要素に
overflow: scroll;を指定
IE11は古い仕様の記述方法のため注意が必要。
画面領域いっぱいにセクションが広がって、スクロールすると画面にキレイにピタッとくっついてくれる。このような処理を実装するためにはいままでJavaScriptを使う必要がありましたが、scroll-snapを使えばCSSだけで簡単に実装できます。
基本的な使い方
1番基本的なscroll-snapの挙動を実装したいときは、HTMLの親要素と子要素に下記の指定をするだけで実装ができます。
- 親要素に
scroll-snap-type: mandatory;を指定する - 子要素に
scroll-snap-align: start;を指定する widthやheightで幅の指定をする- 親要素に
overflow: scroll;を指定
See the Pen scroll-snap-type by Masakazu Saito (@31mskz10) on CodePen.
幅の指定やoverflow: scroll;を指定していないと、動かないときがあります。
scroll-snapの指定をしているはずなのにちゃんと機能しない場合は、この辺りを疑うようにしましょう。
scroll-snap-typeの指定
親要素に指定するscroll-snap-typeでは、「スクロールの方向」「スクロール調整の強さ」を指定します。
スクロールの方向はx・y・bothの3種類があり、それぞれ横方向・縦方向・両方(省略可)にスクロールしたときにくっつくようになります。
スクロール調整の強さはmandatoryとproximityの2種類があります。
mandatoryを使う場合は、必ずスナップ位置にスクロールするようになります。
逆にproximityの場合は境界線に近づくとピタッとくっつきますが、境界線との距離が遠い場合はくっつかなくなります。
scroll-snap-alignの指定
子要素に指定するscroll-snap-alignでは、「スナップする位置」を指定します。
値はstart・end・centerの3種類があり、それぞれ要素の開始・終了・真ん中でスナップするようになります。
基本的にはstartを設定することになりそうです。
ブラウザ対応状況
そして気になるブラウザ対応状況ですが、IE11では古い仕様での記述がサポートとなっています。
古い仕様の記述方法は、親要素に下記のように書きます。
scroll-snap-type: mandatory;
scroll-snap-points-y: repeat(500px);子要素側への記述がなくなった代わりに、scroll-snap-points-yというプロパティでスナップする間隔を指定します。
そのため、IE11だと等間隔にしかスナップできません。
めずらしくIE11も対応なのかと思いきや、理想的な対応状況とは言えないですね。

CSS疑似要素(::beforeや::after)のcontent内で改行したり半角スペースを複数入力する方法
Visual Studio Codeで開始タグを修正すると自動で閉じタグも修正してくれる拡張機能「Auto Rename Tag」
WordPressの常時SSL化で、下層ページのhttpからhttpsへのリダイレクトがうまくいかない場合に確認すること
ファビコンや各種アイコンの作成と設定方法
Dashで「Secure Input is Enabled」と表示される場合の対処法
様々な作業を自動化するgulpの基礎と導入方法
TwitterとFacebook用のOGP設定方法と表示確認方法
Vue CLIでの画像パスの指定方法・配置場所まとめ
Post Snippetsを使ってWordPressでショートコードをの登録と管理をもっと楽に!!
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」
Keyboard Maestroの「Macro Debugger」で複雑なマクロのデバッグを行う方法
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する