MENU

固定ヘッダーでコンテンツが隠れる問題をCSSだけで解決する方法

ページ内リンクで特定の要素にジャンプした際、「ターゲットの内容が画面の一番上にギリギリ表示されてしまう」あるいは「固定ヘッダーに隠れてしまって見えない」といった経験はありませんか?

この問題は、ページ内遷移時にターゲットの位置がブラウザの最上部にピタッと配置されるために発生します。特にヘッダーを position: fixed で固定しているサイトでは、ターゲットの内容がヘッダーの裏に隠れてしまい、ユーザビリティが低下してしまいます。

jQueryやJavaScriptを使ってスクロール位置を調整する対応もできますが、実はCSSだけでも簡単に解決できる方法があるのでご紹介したいと思います。

目次

解決方法:scroll-padding-top を使用するだけ

以下のCSSを html 要素に指定するだけで、ページ内リンクの遷移先がヘッダーに隠れず、さらにスクロール時のスナップ効果も得られます。

html {
  scroll-padding-top: 80px; /* 固定ヘッダーの高さに合わせて調整 */
  scroll-snap-type: y proximity; /* 垂直方向に自然なスナップ */
  scroll-behavior: smooth; /* スムーズスクロール(任意) */
}

ポイント解説

scroll-padding-top

アンカーリンクでジャンプしたとき、ターゲット要素がこの余白分だけ下にずれて表示されるため、ヘッダーと重なりません。

scroll-snap-type: y proximity

垂直方向のスクロール時に要素が“ピタッ”と止まりやすくなり、自然なスクロール体験を実現します。
proximity を使うことで、ユーザーの操作を妨げにくいスナップ動作になります。

scroll-behavior: smooth(任意)

ページ内リンクやスナップ時の動きを滑らかにします。見た目も快適です。

応用:スナップ対象の要素に scroll-snap-alignを指定

scroll-snap-type を有効にするだけではスナップ効果は十分に機能しません。
スナップ対象の要素にも以下のような指定を追加するのがベストです。

section {
  scroll-snap-align: start;
}

これにより、各セクションの上端がスナップ対象となり、スクロール操作がより直感的になります。

まとめ

固定ヘッダーによってページ内リンクの表示が崩れる問題は、CSSだけで以下のようにスマートに解決できます。

  • scroll-padding-top でターゲットの表示位置を調整
  • scroll-snap-type + scroll-snap-align でスクロール体験を向上
  • JavaScript不要で、保守性・パフォーマンスも◎

ユーザーに優しく、開発者にも手間が少ないため、ページ内遷移を実装する際はぜひ使用してみてください!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

運営者はWeb制作歴5年のWebデザイナーです。
本ブログでは現場で培ったWebの知識やノウハウを、初心者の方にもわかりやすくお届けできるよう心がけています。

また、旅先での気づきや、美味しいもの、ちょっとした日常の楽しみも発信しています。
「Webも人生も楽しみたい!」そんな思いで、雑記ブログというスタイルで気ままに更新中。

目次