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

常時SSL化の設定をしたのに「保護された通信」が表示されない時はパスにHTTPが残っているのかも?
HTMLのpattern属性を使ってフォームのバリデーションチェックを行う方法
Vue CLIのプロジェクト管理用のGUI機能から環境を構築する
ウェブ上でLaTeXで数式をキレイにプレビューするJavaScriptライブラリ「MathJax」
W3 Total Cacheをレスポンシブデザインのテーマで使用する時の注意ポイント!!【WordPress】
Gitで最初に設定しておくユーザー名とメールアドレスのグローバル設定
Visual Studio Codeのマルチカーソル機能で文字操作を一括で行う
iTerm2でさらに細かい機能の設定ができる環境設定の「Advanced」タブ
Visual Studio CodeでDart Sassのコンパイルができる拡張機能「DartJS Sass Compiler and Sass Watcher」
WordPressのカスタム投稿タイプを追加後、ページは存在しているはずなのに404になる場合の解決方法
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
1PasswordのChrome拡張機能 (パソコンのアプリが必要)のインストール場所が分かりにくい
WordPress5.5のサイトマップ機能を無効にする
iStat Menusの「CPU & GPU」アイコン表示と設定
Google Driveでフォルダのコピーをする方法
Dashの環境設定やスニペットのバックアップ・同期方法
Alfred 4でのWorkflowの作り方とWorkflow Objectのまとめ
Keyboard Maestroの「Click at Found Image」で画像と一致する場所をクリックするマクロの作り方
サーバーのアップロードファイルの最大容量の確認と変更方法
コーディングで「スペース」と「タブ」のどちらを使えばいいのか?