【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によるスムーズスクロールの実装を検討します。

よくある質問(FAQ)

Q. CSSのscroll-behavior: smoothはどのブラウザで使えますか?
A. 主要モダンブラウザのほぼ全てで対応しています。IE・古いSafariでは動作しないため、JavaScriptのフォールバックが必要な場合があります。
Q. scroll-behaviorをページの一部だけに適用するには?
A. html要素ではなく特定のスクロール可能なコンテナ要素にscroll-behavior: smoothを設定します。overflow: autoやscrollが設定された要素に有効です。
Q. prefers-reduced-motionを考慮してアニメーションを制御するには?
A. @media (prefers-reduced-motion: reduce) { scroll-behavior: auto; }でモーション削減設定のユーザーにはスムーズスクロールを無効化できます。アクセシビリティ対応として重要です。

まとめ

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