0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ページ内リンクの位置がズレてしまう時の対処法

Last updated at Posted at 2024-12-08

はじめに

HP制作をしている駆け出しエンジニアです。
HPにページ内リンクを設置したのに、位置がズレてしまうことはありませんか?

私も丁度その罠にハマってしまい原因が分からず悩んだので、解決方法を備忘録として残します📝

今回のページ内リンクの実装方法

私はidタグを使用して実装しました。
具体的なソースコードは以下の通りです。

目次などに当たる箇所の、着地点までジャンプするタグの実装↓

呼び出し箇所
<li><a> href='section1'</a></li>
<li><a> href='section2'</a></li>
<li><a> href='section3'</a></li>

ジャンプした先のタグ実装↓

呼び出し先箇所
<h1 id="section1">XXXXX</h1>
//コンテンツ省略

<h1 id="section2">XXXXX</h1>
//コンテンツ省略

<h1 id="section3">XXXXX</h1>
//コンテンツ省略

ページ内リンクの位置がズレてしまう場合

私の場合この実装でリンクを押下すると、なぜかタイトルの位置ぴったりに移動してくれなかったのです。

その原因は、ヘッダーを固定しているからでした...
ヘッダーのCSSにposition:fixedを使用していると、ページ内リンクの着地位置がズレることが多いみたいです。

渡しの場合、padding-topでヘッダーの高さの分をずらし、margin-topでそのマイナスの値を入れる方法で解決しました。

今回はヘッダーの高さを98pxで固定していたので、下記のようにCSSを追加しました。

style.css
/* ページ内リンク着地位置のズレ調整 */
#section1,
#section2,
#section3 {
  padding-top: 98px;
  margin-top: -98px;
}

【補足】他の実装方法

padding-topmargin-topを使用するのではなく、
scroll-margin-topを使用するとズレの解消が簡単になると分かったので追記しました!!

style.css
/* ページ内リンク着地位置のズレ調整 */
#section1,
#section2,
#section3 {
    scroll-margin-top: 100px;
}

以上、参考になれば幸いです!!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?