スクロール時に表示領域に画面がくっつくようになる処理を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も対応なのかと思いきや、理想的な対応状況とは言えないですね。

MacでCLIツールをインストールするときに行うターミナルでの「パスを通す」とは一体なにか?
ダミーとして使うURLは適当に入力せず、決まったものを使うようにしよう
gulpでPostCSSを使う方法
Nuxt.jsの「layouts」を使用してレイアウトの共通化を行う方法|Nuxt.jsの基本
「epel-release」インストール後にyum installで「Cannot retrieve metalink for repository」と表示される場合の対処法
GUIコンパイラのPreprosを使ってSassのコンパイルを行う
webpackでTop-Level Awaitを使用して、一番上位でもawaitを使えるようにする方法
WordPressで「現在メンテナンス中のため、しばらくの間ご利用いただけません。」の状態でログインできなくなった場合の対処法
Visual Studio Codeのマルチカーソル機能で文字操作を一括で行う
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理
GitHubの通知を見逃さない!通知に特化したアプリ「Gitify」
Keyboard Maestroの変数基礎
Neovimを使い始める最初の一歩として便利な「LazyVim」
ウェブサイトをmacOSアプリとしてラッピングする「Unite Pro」
Keyboard Maestroの「Macro Debugger」で複雑なマクロのデバッグを行う方法
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定