ヘッダー固定時のページ内外リンクのずれ解消(もちろん、スムーススクロール)
- 公開日:2020/11/21
この記事は最終更新日から4年以上が経過しています。
position:fixedで固定している時にアンカーリンク(ページ内もページ外も)で移動後の位置がヘッダーの高さ分だけずれてしまう対応のメモです。ページ内リンクの場合はスムーススクロールも対応します!
cssだけで対応する(ヘッダーの高さ分paddingとmarginを相殺する)方法もありますが、個人的にあまり好きではないのでjQueryで対応します。
ページ内リンクの場合(固定しているヘッダーの高さを100pxとする)
$(function(){
var headerHeight = 100; // ヘッダーの高さ
$('a[href^="#"]').click(function(){
var speed = 500;
var href= $(this).attr("href");
var target = $(href == "#" || href == "" ? 'html' : href);
var position = target.offset().top - headerHeight;
$("html, body").animate({scrollTop:position}, speed, "swing");
return false;
});
});
ページ外リンクの場合(固定しているヘッダーの高さを100pxとする)
$(window).on('load', function() {
var headerHeight = 100; // ヘッダーの高さ
if (document.URL.match('#')) {
var str = location.href;
var cut_str = "#";
var index = str.indexOf(cut_str);
var href = str.slice(index);
var target = href;
var position = $(target).offset().top - headerHeight;
$("html, body").scrollTop(position);
return false;
}
});