ページ内リンクでスムーズにスクロールする - scroll-behavior プロパティを利用したスムーズクロール - CSS

ページ内リンクでスムーズにスクロールするコードを紹介します。

概要

こちらの記事ではJavaScriptでページ内のリンクでスムーズにスクロールするコードを紹介しました。
新しいバージョンのWebブラウザ(Chromeでは2017年以降)ではJavaScriptを利用せずに、CSSのscroll-behaviorプロパティの設定で実現できるようになりました。 この記事では、scroll-behaviorプロパティの設定でページ内のリンクでスムーズにスクロールするコードを紹介します。

書式

html {
  scroll-behavior: smooth;
}
または、
:root {
  scroll-behavior: smooth;
}

htmlタグのクラス、またはroot擬似クラスとして設定する必要があります。

実装例

コード

以下のHTML、CSSファイルを作成します。
AnchorLinkDemo.html
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
  <link rel="stylesheet" href="AnchorLinkDemo.css" />
    <title></title>
</head>
<body>
  <a id="link1" href="#section1">セクション1へ</a><br />
  <a id="link2" href="#section2">セクション2へ</a><br />
  <a id="link3" href="#section3">セクション3へ</a><br />
  <a id="link4" href="#section4">セクション4へ</a><br />
  <a id="link5" href="#section5">セクション5へ</a><br />
  <hr />

  <a id="section1">セクション1</a>
  <div id="content1">コンテンツ1</div>

  <a id="section2">セクション2</a>
  <div id="content2">コンテンツ2</div>

  <a id="section3">セクション3</a>
  <div id="content3">コンテンツ3</div>

  <a id="section4">セクション4</a>
  <div id="content4">コンテンツ4</div>

  <a id="section5">セクション5</a>
  <div id="content5">コンテンツ5</div>


  <a id="link4" href="#section1">セクション1へ</a><br />
  <a id="link5" href="#section2">セクション2へ</a><br />
  <a id="link6" href="#section3">セクション3へ</a><br />
  <hr />
</body>
</html>
AnchorLinkDemo.css
html {
  scroll-behavior: smooth;
}

#content1 {
  background-color:#fff6c5;
  height:480px;
}
#content2 {
  background-color: #ffe7e7;
  height: 360px;
}
#content3 {
  background-color: #cefff5;
  height: 480px;
}
#content4 {
  background-color: #e9e8ff;
  height: 360px;
}
#content5 {
  background-color: #ffdcee;
  height: 280px;
}

解説

以下の scroll-behavior: smooth; の設定により、ページ内のリンクでの移動時のスクロールがスムーズスクロールになります。
html {
  scroll-behavior: smooth;
}

ページ内のリンクは従来のアンカーリンクの記述のままで動作します。 アンカーリンクの書式や動作についてはこちらの記事を参照してください。
  <a id="link1" href="#section1">セクション1へ</a><br />
  <a id="link2" href="#section2">セクション2へ</a><br />
  <a id="link3" href="#section3">セクション3へ</a><br />
  <a id="link4" href="#section4">セクション4へ</a><br />
  <a id="link5" href="#section5">セクション5へ</a><br />
注意
scroll-behaviorをbodyタグへ設定しても動作しません。htmlタグまたは、:rootに対してscroll-behaviorを設定する必要があります。
動作しない記述
body {
  scroll-behavior: smooth;
}

実行結果

上記のHTMLファイルをWebブラウザで表示します。下図のページが表示されます。


[セクション4へ]のリンクをクリックします。


[セクション4]の位置にジャンプします。切り替わる際にスムーズにスクロールして、セクション4の位置まで移動します。


ブラウザの[戻る]ボタンをクリックすると、スクロールしてページの上部まで戻ります。


他のアンカーリンク([セクション2へ])をクリックします。スクロールしてセクションの位置まで移動する様子が確認できます。

動画

実行結果の動画です。

このページのキーワード
  • アンカーポイント
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
最終更新日: 2024-06-25
作成日: 2023-05-01
iPentec all rights reserverd.