宮古島の激ウマハンバーガー Doug’s Burger のギフトサイトを制作させていただいたのですが、その際にページ内リンクのアンカー先がズレてしまったので試行錯誤。何とか出来たのでメモ。
ページヘッダを position:fixed で固定した事によりページトップの位置がウィンドウトップ(座標的に言うと0,0)とズレてしまったことが原因。
それならばページ内リンクのアンカー先をヘッダの高さ分下にズラせばいいんですよね。
分かっちゃいるんだけど、JavaScriptが苦手なオレは四苦八苦・・・絶対座標で指定した方がいいのか?とかアンカーをズレた位置に配置するか?とかいろいろ考えたんですが、こんな風に解決しました・・・。
ヘッダを固定
ページヘッダを position:fixed で固定し、ヘッダの下に隠れてしまうのでコンテンツ部分に padding-top:100px でヘッダの高さ分、スタート位置をズラします。
#header { width: 100%; width: 960px; height: 100px; position: fixed; left:0; top:0; z-index: 100; } #content{ padding-top: 100px; }
JavaScriptを調整する
普段良く使うJQueryを使ってスムーズにページ内リンクを移動するスクリプトを弄りました。このスクリプトは id(#)へのリンクが全て滑らかになるので便利なんですよね〜。
$(function () { var headerheight = 100; //ヘッダの高さ $('a[href^=#]').click(function(){ var href= $(this).attr("href"); var target = $(href == "#" || href == "" ? 'html' : href); var position = target.offset().top-headerheight; //ヘッダの高さ分位置をズラす $("html, body").animate({scrollTop:position}, 500, "swing"); return false; }); });
2行目で headerheight という変数(引数?)を作って、そこにヘッダの高さを代入し、6行目でトップからオフセットさせるだけ。
分かる人には簡単な事なんでしょうけど・・・。
そんなわけで6月1日ローンチ予定の Doug’s Burger のギフトサイトもよろしくお願いいたします。
稼働したら改めてご紹介させていただきます♪
【追記】ギフトサイトがオープンしました。
Doug’s Burger のギフトサイト
お中元にどうぞ〜♪
One thought on “ヘッダ固定時にページ内リンクがズレるのをなんとかしたい!”