スクロールしてもついてくるボタンを作る(HTML / CSS / JavaScript)

こんにちは、さるまりんです 🐒🔧

ページをスクロールしても、右下にずっと表示されているボタンを見たことはありませんか?

例えばこんなものです。

  • ページトップへ戻るボタン
  • 問い合わせボタン
  • メニューを開くボタン

いわゆる フローティングボタン と呼ばれるものですね。

フレームワークを使うと簡単に作れますが、仕組みを知っておくと

  • 動きがおかしいときに直せる
  • デザイン調整がしやすい

というメリットがあります。

今回は純粋に HTML / CSS / JavaScript だけでフローティングボタンを作ってみました。

まずは完成イメージ

今回作るのはこのようなボタンです。

  • スクロールすると表示される
  • クリックするとページトップに戻る
  • 画面の右下に固定される

HTML

まずはボタンを置きます。

<button id="pageTopBtn">TOP</button>

とてもシンプルですね。

CSS(画面に固定する)

次はCSSです。

#pageTopBtn {
  position: fixed;
  right: 20px;
  bottom: 20px;

  padding: 10px 16px;
  background: #333;
  color: white;
  border: none;
  border-radius: 6px;

  cursor: pointer;
}

#pageTopBtn {
  display: none;
}

#pageTopBtn.show {
  display: block;
}

ポイントはここです。

position: fixed

これを指定すると、スクロールしても画面の同じ位置に固定されます。

つまり

  • bottom: 20px
  • right: 20px

画面の右下 に配置できます。

JavaScript(スクロール時に表示)

次はスクロールしたときの表示制御です。

const btn = document.getElementById("pageTopBtn");

window.addEventListener("scroll", () => {
  if (window.scrollY > 200) {
    btn.classList.add("show");
  } else {
    btn.classList.remove("show");
  }
});

ここでは window.scrollY を使っています。

これは「ページがどれくらいスクロールされているか」を取得する値です。

今回は 200px以上スクロールしたら表示 というシンプルな条件にしています。

JavaScript(ページトップへ戻る)

クリックしたときの処理はこちらです。

btn.addEventListener("click", () => {
  window.scrollTo({
    top: 0,
    behavior: "smooth"
  });
});

ここでは window.scrollTo() を使っています。

top: 0 なのでページの一番上まで移動します。

さらに behavior: "smooth" を指定するとスムーズスクロールになります。

少し変えると「画面上部」にも置ける

さきほどのCSSを少し変えるだけでボタンの位置も変えられます。

例えば右上に配置する場合。

#pageTopBtn {
  position: fixed;
  right: 20px;
  top: 20px;
}

変更したのは bottomtop だけです。

こうすることで画面の右上に固定できます。

「BOTTOMボタン」にする場合

逆に、ページの一番下へ移動するボタンも作れます。

JavaScriptを少し変更するだけです。

btn.addEventListener("click", () => {
  window.scrollTo({
    top: document.documentElement.scrollHeight,
    behavior: "smooth"
  });
});

ここでは document.documentElement.scrollHeight を使っています。

これは ページ全体の高さ を取得する値です。

つまりページの一番下までスクロールするボタンになります。

まとめ

今回作ったフローティングボタンは

  • HTML → ボタンを置く
  • CSS → position: fixed で画面に固定
  • JavaScript → スクロール位置とクリックを制御

この3つで作ることができます。

フレームワークを使うと一瞬ですが、中身はこのような仕組みです。

知っておくと

  • 動きがおかしいときに直せる
  • デザイン調整ができる

ので、意外と役立つ小ネタです。

次回

今回は HTML / CSS / JavaScript だけで作りました。(この記事にも埋め込んでいます)

次回はこれを WordPressに組み込む方法 をやってみたいと思います。

  • どこにHTMLを書くのか
  • CSSやJavaScriptはどこに入れるのか
  • コピペで使える実装

などをまとめる予定です。

読んでくださってありがとうございます。

それではまた!