もくじ
ウェブサイトで固定ヘッダーを使うとき、縦スクロールには対応していても、横スクロールに対応できていないケースがあります。
特に横に広いコンテンツを持つページでは、横スクロールした際にヘッダーがズレてしまい、見た目や操作性が悪くなることも…。
この記事では、そんな問題を解決するために、JavaScript(バニラJS)とjQueryの両方を使った固定ヘッダーの横スクロール追従の実装方法をシンプルに解説します。
基本的な考え方は、横スクロール量に合わせてヘッダーのleftの位置を動的に調整するだけ。
スクロールイベントを監視して、画面の見た目を崩さずに固定ヘッダーを快適に使えるようにしましょう。
まずはJavaScriptのコード例から見ていき、その後jQueryでの実装も紹介します。
リンク
リンク
リンク
JavaScriptで固定ヘッダーを横スクロールに追従させる方法
まずはJavaScript(バニラJS)での実装例です。
Copyをクリックするとコピーできます。
JavaScript
Copy
const header = document.getElementById('header');if (header) { window.addEventListener('DOMContentLoaded', function() { header.style.left = -window.scrollX + 'px'; }); window.addEventListener('scroll', function() { header.style.left = -window.scrollX + 'px'; });}コード解説
window.scrollXはウィンドウの横スクロール量をピクセルで返します。- 横スクロール量に合わせて
leftの値を動的に更新し、ヘッダーの位置ズレを防いでいます。
jQueryで固定ヘッダーを横スクロールに追従させる方法
続いて、jQueryを使った場合の実装例です。
Copyをクリックするとコピーできます。
jQuery
Copy
const $header = $('#header');if ($header.length) { $(document).ready(function() { $header.css('left', -$(window).scrollLeft()); }); $(window).on('scroll', function() { $header.css('left', -$(window).scrollLeft()); });}コード解説
- jQueryの
scrollLeft()で横スクロール量を取得しています。 - jQueryの
css()メソッドでleftを動的に更新しています。
【サンプルコード】固定ヘッダーを横スクロールに追従させる
以下サンプルコードをhtmlファイルなどにコピペして、1500pxより小さい画面幅で確認することで横スクロールが発生します。
Copyをクリックするとコピーできます。
HTML
Copy
<!DOCTYPE html><html lang="ja"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>固定ヘッダーの横スクロール追従サンプル</title><style> body { height: 200vh; /* 縦にもスクロールできるように */ margin: 0; } #header { position: fixed; top: 0; left: 0; width: 100%; min-width: 1500px; height: 50px; line-height: 50px; text-align: center; color: #fff; background: #3498db; } #content { width: 1500px; height: 100vh; margin: 60px auto 0; background: #eee; }</style></head><body> <div id="header">固定ヘッダー(横スクロールに追従)</div> <div id="content">ここに横に長いコンテンツがあります。横にスクロールしてみてください。</div> <script> const header = document.getElementById('header'); if (header) { window.addEventListener('DOMContentLoaded', function() { header.style.left = -window.scrollX + 'px'; }); window.addEventListener('scroll', function() { header.style.left = -window.scrollX + 'px'; }); } </script></body></html>まとめ
どちらの方法も、横スクロールに合わせてヘッダーのleftを負の値で調整するシンプルなロジックが基本です。
普段jQueryを使っている方は2つめのコードを使うと簡単に実装できますし、JavaScriptだけで軽量に済ませたい場合は1つめの方法が向いています。
リンク
リンク
リンク
