ページ内スクロール移動をCSSのみで実現

2024.11.15 09:00
2024.11.15 09:57
ページ内スクロール移動をCSSのみで実現

「このページの上へ」のリンクをクリックした際に、アニメーションでなめらかにページ上部に移動する仕組みですが、いままではjavascriptを併用していました。

参考:以前のページ内スクロールの記事

ところが今はcssだけでできるらしく、しかもすごく簡単。
ということで試してみました。

まずはデモ画面。

コードはこんな感じ。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <style type="text/css">
    html {
      scroll-behavior: smooth;
    }
  </style>
  <title></title>  
</head>
<body id="top">

  <div class="container">

    <div style="height: 400px; background-color: azure;">
      <p>
        テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。
      </p>
    </div>

    <div style="height: 400px; background-color: lavenderblush;">
      <p>
        テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。
      </p>
    </div>

    <div style="height: 400px; background-color: bisque;">
      <p>
        テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。
      </p>
    </div>

    <div style="height: 400px; background-color: powderblue;">
      <p>
        テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。テキストをここに入れます。
      </p>
    </div>

    <div style="padding-top: 100px; height: 200px;">
      <a href="#top">トップへ</a>
    </div>

  </div>

</body>
</html>

スクロールをわかりやすくするために、
ページをかなり長くしています。

で、HTML的には今までと殆ど変わりません。
bodyに「top」というIDをつけて、下のボタンはtopのIDへアンカーリンクをつけます。
これでページ上部まで移動しますが、当然アニメーションはしません。

キモはCSSです。
htmlタグに「scroll-behavior: smooth;」を指定するだけです。簡単!
bodyタグじゃだめらしいですね。

html {
  scroll-behavior: smooth;
}

欠点はイージングやスピードなどの細かい調節ができないことと、ブラウザ対応です。

イージングやスピードは全然気になりませんし、
ブラウザもちょっと古いsafariとかには対応していないみたいですけど、
動作しないからと言っても移動自体はしますし(瞬間移動だけど)、
致命的なものではないな、と割り切れますね。

今回は以上です!