3パターン:ページ内リンク(#アンカーリンク)先の見える部分をずらしたい時の調整方法

当サイトには広告が含まれています。

HTMLコーディングをしていてアンカーリンク(#をつけたページ内のリンク)先の見える部分が、固定ヘッダーなどで隠れたり、ずらしたいなってとき多いと思います。
いくつか対処法があるのでこちらにまとめておきます。
なんでいくつか紹介するかというと、サイトによってうまく動かなかったりする場合があるので、代替案がいくつかあった方がいいと思った為です。
参考にしてみてください。

目次

方法その1:CSSのscroll-paddingを使用する

ページ内のアンカーリンク全て高さが同じものでいいなら、大体これで解決すると思います。

CSS
:root{
	scroll-padding: 150px; /*ずらしたい高さ*/
	scroll-behavior: smooth; /*スムーススクロール*/
}

これでページ全体のアンカーリンク先がずれるようになります。

方法その2:CSSの擬似要素で対処

こちらはHTML側の編集も必要です。リンク先の要素にclassを振ってあげて、
それに付随している擬似要素を見えないようにheightとmarginで調整しているという仕組み。

HTML
<h2 id="gorogoro" class="anchor">
  これはアンカーリンクのターゲットとなっている要素です
</h2>
CSS
:root{
	scroll-behavior: smooth; /*スムーススクロール*/
}

.anchor{
  position: relative;
}
.anchor::before{
  content: '';
  display: block;
  height: 150px;
  margin-top: -150px;
}

方法その3:JavaScriptを使う

jQueryは不要です。

JavaScript
document.addEventListener("DOMContentLoaded", function () {
  const headerHeight = 150; // ずらしたい高さpx

  // すべてのアンカーリンクに対して処理
  document.querySelectorAll('a[href^="#"]').forEach(function(anchor) {
    anchor.addEventListener("click", function(e) {
      const targetId = this.getAttribute("href");

      // 無効なhref(例: # だけ)を除外
      if (targetId === "#" || targetId === "") return;

      const targetElement = document.querySelector(targetId);
      if (!targetElement) return;

      e.preventDefault();
      const targetPosition = targetElement.getBoundingClientRect().top + window.pageYOffset - headerHeight;

      window.scrollTo({
        top: targetPosition,
        behavior: "smooth" // スムーススクロール
      });
    });
  });
});

上記いずれかを使えば解決すると思います。

デザイン作るの難しい〜!と感じたら

デザイン・ホームページで

お困りのことがありましたら、
私たちクートスラボにご依頼ください!
実績多数の女性クリエイターチームが、

どんなお悩みも解決します。

\ 無料相談・ご依頼はこちら /

シェアお願いします!
  • URLをコピーしました!
目次