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」
resizeイベントを使用する場合は、iOS Safariでの挙動に注意
WordPressでbloginfo()の一部パラメーターの廃止・非推奨に注意!
Safari 12.1から外観モード(ライト/ダーク)の判定をCSSで行えるように!
CSSやJavaScriptでスクロールバーの横幅を取得する方法
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
WordPressで作成した記事をSlackでシェアしたときに、抜粋文が長く表示される場合の対処法
JavaScriptで簡単にCookie操作ができるライブラリ「js-cookie」
横幅が広がったときの挙動が変わる!CSS Gridの「auto-fill」と「auto-fit」の違い
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Path Finderでタブセットを使うと、よく使うフォルダ一式を一気に開けるようになる!
ATOKの句読点変換を無効にしているのに、変換されてしまう場合は「変換方法」を確認!
ブログをリニューアルして、ダークモードに対応しました(2020年版)
IllustratorとPhotoshopとXDのツール系のショートカットキーを統一させる
CSSで1行で簡単にスムーススクロールを実装できる「scroll-behavior」プロパティ
Apacheのテストページを非表示にする方法
選択テキストをHTMLタグですぐ囲めるようになるVisual Studio Code拡張機能「htmltagwrap」
Macの文字入力をもっと楽にする小技集
UAからGoogleアナリティクス4(GA4)へ移行する方法
Obsidianで整理した知識をAnkiで定着させる方法