CSSで1行で簡単にスムーススクロールを実装できる「scroll-behavior」プロパティ

ページ内リンクをクリックしたときに、ページがキレイにスクロールしながら移動するいわゆる「スムーススクロール(スムーズスクロールと言う人もいますが、英語だとSmooth Scrollなので、この記事ではスムーススクロールに統一します)」。
ひと昔前だとjQueryを活用したり、window.scrollを使ったりが必要でしたが、CSSでも実現ができます。
scroll-behavior
scroll-behavior: smooth;を指定してあげると、ページ内リンクをクリックしたときにスムーススクロールになります。
1行追加するだけなので非常にラクですね。
html {
scroll-behavior: smooth;
}実際のサンプルは下記になります。
See the Pen scroll-behavior: smooth; by Masakazu Saito (@31mskz10) on CodePen.
ちゃんとページ内リンクをクリックするとスムーススクロールになっています。
JavaScriptは一切使用していないのが分かると思います。
対応ブラウザ
いままで何行もJavaScriptを書く必要があったのを考えると、1行で実装が済んでしまうscroll-behaviorは非常に便利なのですが、対応ブラウザがまだ微妙です。
IE11は切ってしまってもいい気がしますが、Safariに対応していません。
その他の問題
1行でスムーススクロールの設定ができてしまうので、細かい調整ができないのは問題でもあります。
- ページ上部に固定ヘッダーなどがあって、遷移先の数ピクセル上までスクロールなどの細かい調整ができない
- 全てのページ内リンクがスムーススクロールになってしまう
- アニメーションスピードの設定はできない
細かく設定したい場合は、いままで通りJavaScriptを使う必要がありそうです。




全角スペースを可視化してくれるVisual Studio Codeの拡張機能「zenkaku」
CSSのz-indexの確認や管理を便利にする方法
webpackでTop-Level Awaitを使用して、一番上位でもawaitを使えるようにする方法
Nuxt.jsでaxios-moduleを使ってAPIからデータを取得・表示する|Nuxt.jsの基本
HTTP/2が設定されているはずなのに、ブラウザ上でHTTP/1.1になってしまう場合はセキュリティソフトを確認
ブログに見出しを設置できるjQueryプラグイン「TOC | jQuery Table of Contents」
Nuxt.jsでVuexストア連携を行う方法|Nuxt.jsの基本
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Figmaでオブジェクトの整列をショートカットキーを使って効率的に行う方法
ブラウザでこれ以上スクロールできない場合の挙動を制御する「overscroll-behavior」プロパティ
ImageOptimで画像圧縮に最適な設定を行う
Google Drive内のドキュメントを検索して開けるAlfredのWorkflow「Google Drive Workflow for Alfred」
macOSのシステム環境設定「インターネットアカウント」の設定見直し
使いやすくてキレイなmacOSのRSSリーダー「Reeder 3」
Visual Studio Codeで対応する括弧に色を付けて見やすくする環境設定
1PasswordとAlfredを連携してログイン情報の検索を行う方法
WordPressのプラグインはどれを入れたら良い?とりあえず最初に導入をオススメするプラグイン一覧
Visual Studio CodeからFTPソフトのTransmitを使用する拡張機能「Transmit」