TojiTech No Programming, No Life.

アンカーリンクが外部からのリンクでずれる場合の対処

通常、以下のような形で、スムーズスクロールなどのを実装していると思います。

$(document).ready(function($) {
  var headerHeight = 100 // ヘッダーの高さ
  $("a[href*=\\"#\\"]:not([href=\\"#\\"])").click(function() {
    if (location.pathname.replace(/^\\//, "") === this.pathname.replace(/^\\//, "") && location.hostname === this.hostname) {
      var target = $(this.hash)
      target = target.length ? target : $("[name=" + this.hash.slice(1) + "]")
      if (target.length) {
        $("html, body").animate({
          scrollTop: target.offset().top - headerHeight
        }, 500)
        return false
      }
    }
  })
})

ヘッダーが以下のような場合…

header {
  position: fixed;
  top: 0;
  height: 100px;
  width: 100%;
  background-color: rgba(0, 0, 0, 0.6);
  z-index: 9999;
}

外部リンクで、飛んできた際に、スクロール位置がずれるという問題が発生します。

そんな時は、以下のようにCSSを追加することで、外部からのリンクに対して、もヘッダーの高さ分を考慮したアンカーリンクになります。

html, body {
  scroll-padding-top: 100px; // ヘッダーの高さ
}

Profile

Yuki Tojima

RubyやPhp、JavaScriptまわりのことを徒然と記録に残す技術ブログです。

至らぬところもあると思いますが、見守っていただけると幸いです。

記事のリクエストや、間違いなどありましたら X (旧 Twitter) のDMなどでお気軽にご連絡ください。

ytojima @TojiTech
プロフィール画像