クリエイターブログ

jQueryのスムーススクロールから「scroll-margin-top」への乗り換えを

2026.06.19 Posted by

こんにちは、ウェブラボ クリエイターズメモです。

ヘッダーを固定しているサイトで、ページ内リンクをクリックしたらリンク先がヘッダーに隠れてしまった、という経験はありませんか?

よくある解決策は、jQueryを使ったスムーススクロールに「ヘッダーの高さ分だけずらす」処理を加えることでした。

この方法でも問題はないのですが、実は現在では、CSSの scroll-behaviorscroll-margin-top を組み合わせるだけで、同じことがよりシンプルに実現できます。

scroll-behavior:CSSだけでスムーススクロールを実現する

scroll-behavior は、スクロールの動き方を指定するCSSプロパティです。smooth を指定するとアンカーリンクのクリック時にスムーススクロールが有効になります。

たったこれだけです。jQueryは一切不要です。

scroll-margin-top:固定ヘッダーに隠れる問題を解決する

scroll-margin-top は、アンカーリンクでスクロールしたときに要素の上に余白を作るCSSプロパティです。

固定ヘッダーの高さ分をここに設定しておくことで、セクションがヘッダーに隠れる問題を解決できます。

ページ内リンクの飛び先となるすべての要素に設定が必要ですが、セレクタを[id] にすることで、ID属性を持つ要素すべてに一括で適用できます。

実装方法

それでは実際に実装してみましょう。

CSSの設定

HTMLはそのままでOK

リンク側とターゲット側のHTMLは従来と変わりません。

(必要であれば)jQueryのコードは削除する

今まで使っていたjQueryのスムーススクロール用のコードは不要になります。
必要に応じて、既存のコードも削除しましょう。

jQueryの方法との比較

jQueryの方法 CSSの方法
jQueryの読み込み 必要 不要
コード量 多い 少ない
ヘッダー高さの調整 JSの数値を変更する CSSの数値を変更する
セクションごとに余白を変える 難しい 簡単(個別に上書きできる)

ブラウザ対応

Chrome・Firefox・Safari・Edgeの主要ブラウザに対応しています(IE11は非対応)。

応用:scroll-padding-top を使う方法もある

似たようなプロパティとして scroll-padding-top という方法もあります。

scroll-margin-top は各要素(移動先のセクション)に設定するのに対して、scroll-padding-top はスクロールするコンテナ側(html 要素)に設定します。

全セクション共通でオフセットを設定するなら、html に1回書くだけで済む scroll-padding-top の方がシンプルです。一方で「このセクションだけ余白を多くしたい」という個別の調整が必要な場合は、セクションごとに上書きできる scroll-margin-top の方が柔軟に対応できます。

どちらを使っても結果は同じなので、サイトの構成に合わせて使いやすい方を選んでみてください。

補足:アニメーションを無効にしているユーザーへの配慮

OSやブラウザの設定で「視差効果を減らす」「アニメーションを無効にする」を有効にしているユーザーがいます。スムーススクロールもアニメーションの一種なので、そういったユーザーには瞬時にスクロールする方が親切かもしれません。

CSSの prefers-reduced-motion メディアクエリを使うと、アニメーション設定を無効にしているユーザーにだけ scroll-behavior を無効化できます。

必須の対応ではありませんが、アクセシビリティへの配慮として覚えておくと役立ちます。

jQueryを使わずにスムーススクロールと固定ヘッダーのズレ問題をまとめて解決できるのはうれしいですね。ぜひ試してみてください。

オリエンシートダウンロード

採用情報

採用サイト 絶対に外せない5つのチェックポイント

オリエンシートダウンロード

CONTACT

お電話でのお問い合わせ

03-5366-3277

受付時間:平日9:30〜18:30

メールフォームからのお問い合わせ

お問い合わせ(東京本社)

PAGETOP

Document資料請求

Contactお問い合わせ