scroll-magin-topとscroll-padding-topは何が違うの?どう使い分けるの?

2025.03.24

ページ内のヘッダーをdisplay: fix;などで上部に固定している場合、アンカーリンクを使ってページをスクロールすると、スクロール先がヘッダーの下に隠れてしまうという問題があります。アンカーリンクのスクロール先がビューポート(表示エリア)の最上部に来るためです。

この問題を解消するのがscroll-margin-topscroll-padding-topという二つのプロパティです。ところが、二つあるので何が違うのかわかりづらいと思います。

scroll-margin-topscroll-padding-top は似ていますが、用途が異なるので次の基準で使い分けると良いです。

scroll-margin-top の特徴

  • リンク先の要素(アンカーのターゲット)に指定する
  • ページ内リンクのずれ防止に最適
  • HTMLの構造変更が不要

例:ページ内リンクの調整

h2 {
  scroll-margin-top: 80px; /* 固定ヘッダーの高さ分 */
}

scroll-padding-top の特徴

  • スクロールコンテナ(例:bodymainなど)に指定する
  • スクロール位置の基準をずらすイメージ
  • 無限スクロールインタラクティブなUIに便利

例:スクロール全体の余白調整

html {
  scroll-padding-top: 80px; /* 固定ヘッダーの高さ分 */
}

どちらを使うべき?

ページ内リンクのズレ防止 ➔ scroll-margin-top
スクロール全体の基準調整 ➔ scroll-padding-top

実用例

  • ヘッダーが固定されたサイトでページ内リンクのズレを防ぐなら…
    scroll-margin-top が最適
  • SPA(シングルページアプリ)などで、要素のロードや非同期コンテンツが頻繁に切り替わるなら…
    scroll-padding-top が便利