目次
- はじめに:なぜか子要素がはみ出てしまう
- 子要素がはみ出る基本的な仕組み
- 原因①:widthが親要素より大きい
- なぜはみ出る?
- 解決方法
- 原因②:box-sizingがcontent-boxのまま
- 対策(おすすめ)
- 原因③:position:absoluteを使っている
- 対処法
- 原因④:flexやgridの設定ミス
- flexでよくある例
- 解決方法
- 原因⑤:画像やテキストが大きすぎる
- 対策
- 原因⑥:長い英数字やURL
- 対処法
- overflowプロパティで制御する
- はみ出しを隠す
- スクロールさせる
- 注意点
- スマホで子要素がはみ出る原因
- 対策例
- 子要素がはみ出るときのチェックリスト
- よくある勘違い
- まとめ:はみ出る原因は必ず特定できる
はじめに:なぜか子要素がはみ出てしまう
CSSでレイアウトを作っていると、
- 子要素が親要素から飛び出してしまう
- 横スクロールが発生する
- スマホ表示でレイアウトが崩れる
といった問題に直面することはありませんか?
「子要素がはみ出る」問題は、
CSS初心者が非常につまずきやすい代表例です。
この記事では、
HTML / CSS初心者の方でも理解できるように
子要素がはみ出る原因と正しい対処法を
基礎から順番に解説します。
子要素がはみ出る基本的な仕組み
まず大前提として、
CSSでは 子要素が親要素を超えて表示されることは珍しくありません。
.parent {
width: 300px;
}
.child {
width: 400px;
}
この場合、
childの方が大きいため、
親からはみ出して表示されます。
原因①:widthが親要素より大きい
最もよくある原因です。
.child {
width: 100%;
padding: 20px;
}
なぜはみ出る?
- width:100% は内容幅
- paddingが加算される
結果として、
親幅 + padding分 はみ出します。
解決方法
.child {
box-sizing: border-box;
}
原因②:box-sizingがcontent-boxのまま
CSSの初期状態では、
box-sizing: content-box;
になっています。
この場合、
- width + padding + border
が実際のサイズになります。
対策(おすすめ)
* {
box-sizing: border-box;
}
これだけで、
はみ出し問題の多くが解決します。
原因③:position:absoluteを使っている
絶対配置は、
親のレイアウト計算から外れます。
.child {
position: absolute;
top: 0;
}
この場合、
親の高さや幅を超えて
自由に配置されます。
対処法
.parent {
position: relative;
}
親に基準を与えることで、
制御しやすくなります。
原因④:flexやgridの設定ミス
flexboxやgridでも、
設定次第ではみ出すことがあります。
flexでよくある例
.container {
display: flex;
}
.item {
width: 300px;
}
画面幅が足りないと、
横にはみ出してスクロールが発生します。
解決方法
.container {
flex-wrap: wrap;
}
原因⑤:画像やテキストが大きすぎる
特に画像は要注意です。
img {
width: 800px;
}
対策
img {
max-width: 100%;
height: auto;
}
これで、
親要素を超えて表示されなくなります。
原因⑥:長い英数字やURL
テキストも、
条件次第ではみ出します。
<p>aaaaaaaaaaaaaaaaaaaaaaaaaaaa</p>
対処法
p {
word-break: break-word;
}
または
overflow-wrap: anywhere;
overflowプロパティで制御する
どうしてもはみ出る場合は、
overflowで制御します。
はみ出しを隠す
.parent {
overflow: hidden;
}
スクロールさせる
.parent {
overflow-x: auto;
}
注意点
overflowは
根本解決ではなく応急処置として使うのが基本です。
スマホで子要素がはみ出る原因
スマホ表示で多い原因です。
- 固定width(px)を使っている
- 画像サイズが大きい
- flex-wrapが無効
対策例
@media (max-width: 768px) {
.child {
width: 100%;
}
}
子要素がはみ出るときのチェックリスト
問題が起きたら、
次を順番に確認しましょう。
- widthやmin-widthを指定していないか
- paddingやborderが加算されていないか
- box-sizingはborder-boxか
- position:absoluteを使っていないか
- flex-wrapやgrid設定は適切か
よくある勘違い
初心者が誤解しやすいポイントです。
- 親にheightやwidthを指定すれば解決する
- overflow:hiddenが正解
- 子要素が勝手に悪さしている
多くの場合、
原因はCSS指定の組み合わせです。
まとめ:はみ出る原因は必ず特定できる
CSSで子要素がはみ出る問題は、
- width・padding・box-sizing
- position
- flex・grid
- 画像・テキスト
といった 基本要素の理解不足 が原因です。
一つずつ確認すれば、
必ず解決できます。
HTML/CSS初心者の方は、
まず box-sizing: border-box と
レスポンシブ前提の設計を
意識してコーディングしてみてください。
それだけで、
はみ出しトラブルは大幅に減ります。