ページ内リンクでスムーススクロールを実装する際、たいていはJavaScriptやjQueryを用いる方法を検討するでしょう。
しかしCSSの新機能scroll-behaviorプロパティを使えば、簡単にスムーススクロールを実現できます。
「scroll-behavior」とは?
「scroll-behavior」は、ページ内リンクをクリックときに、該当箇所へ時間をかけてスクロールするイベント(スムース・スクロール)を実行させるプロパティです。
CSSわずか1行で設定が可能で、JavaScriptなしで手軽に導入できます。
CSS:
html {
	scroll-behavior: smooth;
}
HTMLサンプル
<a href="#example">ここをクリックすると</a> . . . <div id="example">ここまでスクロールするよ</div>
実際にこのサイトでも導入しています。
下のボタンをクリックしてみてください。
「scroll-behavior:smooth;」が効かないときは?
スムーススクロールが動作しない場合、以下のような理由が考えられます。
- 対象の親要素に
overflow:hidden;が設定されている - 対象の要素に
height:100vh;が設定されている - 他のJavaScriptとコンフリクト(干渉・競合)している
 
scroll-behaviorプロパティの構文
「scroll-behavior」プロパティの初期値はautoで、スクロールスピードを変えるためにはsmoothを指定します。
/* 初期値 */
html {
	scroll-behavior: auto;
}
/* スムーススクロール */
html {
	scroll-behavior: smooth;
}
「scroll-behavior」のブラウザ対応状況
Safariではバージョン15.4からscroll-behaviorプロパティに対応し、モダンブラウザ全てで使えるようになりました。
注意点
便利な「scroll-behavior」ですが注意点もあります。
- すべてのページ内リンクがスムーススクロールになる
 - 移動速度の設定ができない
 - 遷移先の位置を細かく指定できない
 - URLにアンカーリンクがつく
 
スクロール位置を調整する「scroll-padding-top」を利用する
遷移先の位置を指定したい場合、「scroll-padding-top」を使います。
例:
html {
	scroll-padding-top: 100px;
}
この例では画面の最上部から100px下に移動します。
リンクした際のハッシュ(#)をURLから取り除く
リンクした際にURLの末尾につく『#』を取り除くjavascriptを紹介します。
(function() {
	window.addEventListener("hashchange", function() {
		const sp = location.href.split("#");
		history.replaceState(null, null, sp[0]);
	});
})();
まとめ
scroll-behavior:smooth;はいくつかの注意が必要なものの、JavaScriptやjQueryライブラリで実装する場合と比べて格段に、CSSだけで手軽にスムーススクロールのアニメーションを加えることのできる便利なプロパティです。
ぜひお試しください。