CSS Web制作

CSSだけで固定ヘッダー時のページ内スクロール位置がズレないようにする方法【scroll-padding-top使用】

2024年2月25日

※ 当サイトではアフィリエイト広告を利用しています

ページ内スクロールさせたら、ヘッダーがコンテンツに重なっちゃうんだけど、どうにかならない?

例えば、以下のような場合。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

ヘッダーのメニューをクリックすると、各コンテンツの上にヘッダーが重なってしまうのが分かります。

今回は、ページ内スクロールしてもコンテンツに重ならない方法を解説します。

Web制作おすすめ教材と案件獲得サービス
当ブログではWeb制作学習におすすめの教材を厳選してご紹介しています。
こちらの記事を参考に教材を購入して成果を出している人もたくさんいるので、自分に必要な教材を探してみて下さい。
また、学習面だけでなく営業面である案件獲得サービスもご紹介しています。
スキルが身についても仕事がなければ意味がないので、営業に不安がある人はこちらの記事をぜひ参考にしてみて下さい。
この記事を参考にスキルと営業力を身につけて稼げるようになりましょう!

CSSだけで固定ヘッダー時のページ内スクロール位置がズレるのを解決する方法

先ほどのデモはヘッダーをposition: fixed;で固定していて、これを書くと要素が浮くような感じになるため、その下に要素が潜り込んでしまうのです。

これを解決するには、ヘッダーの高さが50pxなら、以下のコードを書けばOKです。

html {
  scroll-padding-top: 50px; /* ヘッダーの高さ */
}

デモはこちらです。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

今度はセクションの真上にピッタリとヘッダーが来ました(ページ内スクロールした後に、少しスクロールすると分かります)

 

固定ヘッダーの高さが可変の場合

scroll-padding-topを使う場合は、ヘッダーの高さが決まっている場合ですが、中には画面幅によって可変する場合もあるかも知れません。

その場合は変数を使うなどの方法もあるかも知れませんが、jQueryを使ってヘッダーの高さを取得して、その分をmargin-topでコンテンツを下げるという方法もあります。

その方法については、以下の記事を参照下さい。

あわせて読みたい
【jQuery】固定ヘッダーでページ内リンクのジャンプ先の位置を調整する方法
【jQuery】固定ヘッダーでページ内リンクのジャンプ先の位置を調整する方法

続きを見る

まとめ

今回は、scroll-padding-topを使って、固定ヘッダー時のページ内スクロール位置がズレるのを解決する方法を解説しました。

この方法は一行だけで済むので簡単ですが、ヘッダーの高さが可変の時は注意しましょう。

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

  • この記事を書いた人

じゅんぺい

37歳からWeb制作とブログ開始。Web制作歴5年目でコーディングとWordPressオリジナルテーマ制作が中心。これまで120件以上を納品。当ブログ月間最高15万PVで、370記事以上はWeb制作の技術記事。コンテンツ販売→累計売上1200万円&1500部超え。X(旧Twitter)フォロワー7200人以上。2024年3月からブログの経験を活かしてライターとしても活動を開始。

-CSS, Web制作