見出し画像

マージンの相殺

CSSでmargin設定をしたのに意図しない状態になることはよくある。
「マージンの相殺」という言葉を知っていれば対応策が検索で見つかるだろう。

兄弟要素の縦並びで
上の要素の margin-bottom:10px
下の要素の margin-top:10px
で間隔は  10px + 10px =20px  にはならない。
この状態の時はどちらか大きい方の値がセットされるので、結果は 10px になる。
これを理解していれば対応は可能だろう。

他のパターンとして親の要素を突き抜けてしまうパターンがある。
これは検索しにくいような気がするので、検索されそうなキーワードで名称を書いておく。
「親要素 子要素 上を突き抜ける」イマイチ?
「親要素 子要素 マージン 上にでる」これもイマイチか?
「マージン 上にでる」※思いついたら追記する

ともかくこんな状態

画像1

解決方法は親要素に overflow:hidden を付与すれば希望通りの表示になる。

こちらのサイトにマージン相殺の4パターンが解説されている。
親要素にmarginの指定が無くても、相殺と同じになるようです。(上記のパターンはそうなってる)

coliss

このサイトからもリンクされている https://csswizardry.com/ の記事が興味深かったというか目から鱗。。

隣接する兄弟要素で起きるマージンの相殺は、CSSのスタイルを変更することで回避することができます。個人的には「Single-direction margin declarations」に書かれている「マージンの指定は単一方向にする」に従うことを好みます。このルールはマージンの相殺を回避するだけでなく、ほかにも利点があります。

この記事が気に入ったらサポートをしてみませんか?