【CSS】scroll-behaviorでスムーズスクロールを実装する方法

HTML/CSS

ページ内リンクや「トップへ戻る」ボタンをクリックしたとき、瞬時に移動するのではなく滑らかにスクロールすると、ユーザー体験が向上します。CSSのscroll-behaviorプロパティを使えば、JavaScriptを使わずに簡単にスムーズスクロールを実装できます。

scroll-behaviorの基本

scroll-behaviorはスクロール操作の挙動を指定するCSSプロパティです。適用対象はスクロール可能な要素やhtml, bodyです。

  • auto:デフォルトのスクロール(即座に移動)
  • smooth:滑らかなスクロール

ページ全体にスムーズスクロールを適用

サイト全体にスムーズスクロールを有効にする場合は、html要素に指定します。

html {
  scroll-behavior: smooth;
}

これで、ページ内リンク(例:<a href=”#section1″>)をクリックしたときに滑らかに移動します。

特定の要素にだけ適用する

スクロール可能な特定の要素にのみスムーズスクロールを設定することもできます。

.scroll-box {
  width: 300px;
  height: 200px;
  overflow-y: scroll;
  scroll-behavior: smooth;
}

この場合、.scroll-box内のリンクやJavaScriptによるscrollTop操作がスムーズに動きます。

JavaScriptとの併用

scroll-behaviorをCSSで指定しておくと、JavaScriptでのscrollIntoViewにも自動的に反映されます。

document.getElementById('target').scrollIntoView({
  behavior: 'smooth'
});

ただし、JS側でbehaviorを明示的に指定すれば、CSSの設定に関わらず個別に制御可能です。

対応ブラウザ

scroll-behaviorは主要なモダンブラウザでサポートされています。Safariは比較的対応が遅かったですが、現在では最新版で利用可能です。古いブラウザ対応が必要な場合は、JavaScriptによるスムーズスクロールの実装を検討します。

まとめ

scroll-behaviorを使えば、数行のCSSで簡単にスムーズスクロールを実現できます。サイト全体に適用するだけでなく、スクロールボックスなど特定要素に限定する使い方も可能です。シンプルでパフォーマンスに優れた実装のため、まずはCSSでの対応を検討するとよいでしょう。