CSSだけで!スムーススクロールの実装方法
今回はページ内のリンクをクリックした際に、対象のセクションや要素まで滑らかに移動する効果を持つ、スムーススクロールについてご紹介をします。
しかし、多くの実装がjQueryを使用しています。今回は、初心者の方に向けて、jQueryを使わずにシンプルなスムーススクロールを実装する方法を紹介します。
デモ
各リンクをクリックすると指定した対象先まで滑らかに移動します。
See the Pen scroll-behavior by hide (@hide225) on CodePen.
HTMLの設定
基本的な構造を用意します。今回は、グローバルメニューとTOPボタンを用意しています。
お好きなようにカスタマイズしてください。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>scroll behavior</title>
</head>
<bod>
<header>
<div class="inner">
<nav>
<ul>
<li>
<a href="#sec-1">セクション1</a>
</li>
<li>
<a href="#sec-2">セクション2</a>
</li>
<li>
<a href="#sec-3">セクション3</a>
</li>
</ul>
</nav>
</div>
</header>
<section id="sec-1">
<p>セクション1</p>
</section>
<section id="sec-2">
<p>セクション2</p>
</section>
<section id="sec-3">
<p>セクション3</p>
</section>
<a class="pageTop" href="#">ページトップ</a>
</body>
</html>
CSSの設定
ここでは、「scroll-behavior」プロパティを使用しています。
scroll-behavior: auto; //初期値
scroll-behavior: smooth;
‘smooth’を指定することでスムーススクロールを実装できます。
html {
scroll-behavior: smooth;
}
header {
background-color: #333;
padding: 10px;
}
header ul {
list-style: none;
display: flex;
gap: 30px;
justify-content: center;
align-items: center;
}
header li a{
color: #fff;
text-decoration: none;
transition: opacity ease .3s;
}
header li a:hover{
opacity: .6;
}
section {
width: 100%;
height: 200px;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.2rem;
background-color: #efefef;
}
section:nth-of-type(2) {
background-color: #fff;
}
.pageTop {
position: fixed;
bottom: 40px;
right: 40px;
color: #1881b7;
}
これで簡単に実装することができました。
以下、環境によっては、JSを採用しなければならない為、ご紹介します。
JSを採用した方がいい場合
移動速度の調整をしたい
scroll-behaviorプロパティは移動速度がブラウザ依存の為、調節が必要な場合はJSを利用してください。
移動先の位置を調整をしたい
移動速度と同様、細かな調整ができない為、移動先の要素にpaddingやmarginで調整をする必要があります。
URLにアンカーリンクが残る
アンカーリンクに「#」を指定している場合は、ブラウザの戻るボタンをクリックするとページトップまでスムーススクロールしてしまうなど、意図しない挙動をします。
同様にJSなどでURLイベントを設定している場合は、予期しないエラーが発生する可能性がありますので、ご注意ください。
最後に
これで、CSSだけで簡単にスムーススクロールを実装することができました。
簡単に導入できる反面、細かな設定ができないのがネックですね。
閲覧ありがとうございました。
関連記事
-
jqueryは不要!アコーディオン実装方法
今回は、初心者の方に向けて、jQueryを使わずにシンプルなアコ ...
-
WordPressのログイン画面をカスタマイズしよう!
WordPressのログイン画面をカスタマイズする方法を解説しま ...
-
Emmet記法:HTML/CSSコーディングを劇的に加速する神秘の atelier
この記事では、Emmetの基本的な概念と使い方、および便利なショ ...
-
サイトを魅力的に!Wow.jsで簡単アニメーションの追加
この記事では、Wow.jsを使用してウェブサイトにアニメーション ...
-
Swiper.js基本的な使い方カスタマイズ方法
この記事では、Swiper.jsを使用してブログ記事のスライダー ...
-
HTMLとCSSだけ!ドロップダウンメニューの実装方法
ウェブサイトのナビゲーションメニューは重要な要素の一つです。この ...