こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。
Webサイトを制作していると、「意図していないのに横スクロールが出てしまう」という現象に遭遇したことはありませんか?
スマホやPCでページを確認すると、右端に謎の余白が生まれ、横にスワイプできてしまう状態になる。
見た目は地味なバグですが、ユーザー体験を大きく損ない、納品直前のチェックで慌てる原因にもなります。
実際、横スクロールが出る原因はひとつではありません。
画像や要素の幅指定、CSSレイアウトのバグ、アニメーションのtransformの影響、ブラウザ特有の挙動など、複数の要因が絡むケースも多々あります。
この記事では、横スクロールが発生する代表的なパターンを洗い出し、原因特定のためのチェック手順と具体的な解決方法をまとめました。
制作現場での実践的なノウハウとして活用いただける内容になっていますので、横スクロールバグで困ったときのリファレンスとしてぜひブックマークしてください。
横スクロールが発生する主な原因
1. 画像や要素の幅指定ミス
一番多い原因が、幅100%指定の画像や要素に余計なマージン・パディングが追加されているケースです。
- 親要素より大きい幅を持つ画像
- box-sizing未指定によるパディング計算ズレ
- 100vw指定の要素+スクロールバー幅
対策
- 画像にはmax-width: 100%;を設定し、はみ出しを防ぐ
- box-sizing: border-box;を全体適用
- 100vw使用時はoverflow-x: hidden;で制御
2. 絶対配置(position:absolute / fixed)によるズレ
絶対配置した要素が意図せず親要素からはみ出し、横スクロールが発生することもあります。
例
バナーやフローティング要素をleft: 100%やright: -10pxで配置したケース。
対策
- 配置位置を見直し、calc()で相対位置指定
- はみ出し部分をclip-pathやoverflow: hiddenで隠す
3. transformアニメーションの影響
スライダーやフェードインなど、translateX()を使ったアニメーションが要素を一時的に画面外に動かし、スクロールバーを誘発することがあります。
対策
- アニメーション用のラッパー要素を用意し、外側にoverflow: hidden;を指定
- transformの移動量を親要素内に収める
4. 表やコードブロックのはみ出し
テーブルやコードブロックは長い単語や固定幅のデータが並ぶため、狭い画面で横スクロールが発生しがちです。
対策
- overflow-x: auto; white-space: nowrap;で横スクロールを許容しつつ、デザイン的に目立たせる
- word-break: break-all; や hyphens: auto;で折り返し対応
5. マイナスmarginやcalc()の誤差
margin-left: -10px;
width: calc(100% + 20px);
といった指定が積み重なることで、意図せず余白が発生するケースがあります。
対策
- マイナスmarginを使わず、padding+背景色で表現
- calc指定はブラウザ検証ツールで境界を可視化し調整
原因特定のためのチェック手順
- 開発者ツールの「要素」タブで幅を確認する
- overflow-xが出ている要素を特定する
- 一時的にoutline: 1px solid red;を全要素に適用して境界を確認
よく使う横スクロール対策コード
html, body {
overflow-x: hidden;
}
img {
max-width: 100%;
height: auto;
}
* {
box-sizing: border-box;
}
まとめ
横スクロールの主な原因
・幅100%要素のズレ(画像・vw指定)
・absolute / fixed配置のはみ出し
・transformアニメーションによる誘発
・テーブルやコードブロックの長文
・マイナスmarginやcalc誤差
・absolute / fixed配置のはみ出し
・transformアニメーションによる誘発
・テーブルやコードブロックの長文
・マイナスmarginやcalc誤差