visibility_off現象
- 要素に margin や padding を指定しても、スペースが空かない・広がらない
- レイアウトが詰まって見え、思った余白が確保できない
help_outline原因
- インライン要素のまま使っている
display: inlineの要素には、仕様上、上下の余白(margin-top/bottom)が正しく反映されません。- 親要素に
overflow: hiddenが指定されている overflow: hiddenは、親要素の範囲からはみ出した子要素やその余白を「隠す(切り取る)」設定です。そのため、余白も「はみ出した部分」として扱われ、見えなくなってしまいます。box-sizingがcontent-boxのまま- デフォルトの状態では、要素の幅(width)に
paddingやborderの大きさが加算されてしまいます。そのため、意図したレイアウトや余白にならないことがあります。
build対策・コード例
要素をブロック要素にする
.element {
display: block;
margin: 16px 0; /* 上下に16pxの余白 */
padding: 12px; /* 内側に12pxの余白 */
}
全体に box-sizing: border-box を適用する
この指定をCSSの冒頭に入れておくのが一般的です。これにより、paddingやborderが幅の内側で計算されるようになり、レイアウトが非常に扱いやすくなります。
*,
*::before,
*::after {
box-sizing: border-box;
}
親要素の overflow 設定を見直す
もし意図しない指定であれば、overflow: visible;(デフォルト値)に戻すことで、余白が表示されるようになります。
.container {
overflow: visible; /* はみ出しを隠さず、余白を確保 */
}
bug_reportデバッグ方法
開発者ツール(F12キー)で要素を選択し、「Computed」または「計算済み」パネルを見ると、実際に適用されている余白(margin/padding)を視覚的に確認できます。
また、一時的にアウトラインや背景色を付けて、要素の範囲そのものを可視化するのも有効な手段です。
.element {
outline: 1px solid red;
background-color: rgba(255,0,0,0.1);
}
school応用ポイント
マージンの相殺(Margin Collapse)
隣り合うブロック要素の上下のmarginは、大きい方の値だけが適用される(重なって相殺される)というCSSの仕様です。特に、親要素と最初の子要素の間でもこの現象が起こるため、「子要素の margin-top が効かない」と感じることがあります。
対策例:
.parent {
padding-top: 1px; /* 親要素に僅かなpaddingやborderを入れると相殺を防げる */
margin-top: 0;
}
代替テクニック:gap プロパティを使う
Flexbox や Grid のコンテナでは、子要素同士の間隔を margin ではなく gap で指定すると、マージン相殺の影響を受けずに安定した余白が取れます。
.flex-container {
display: flex;
gap: 16px; /* 子要素間に均等な16pxの余白 */
}
チェックリスト
✅ 対象要素に display: block または flex/grid が指定されている
✅ box-sizing: border-box が全体に適用されている
✅ 親要素の overflow 設定が余白を切っていない
✅ マージンの相殺の影響を受けていないか確認した
✅ Flexbox/Grid では gap の利用を検討した