SHU BLOG

BLOG NEWS ブログ

  • ARTICLE
    2020.06.03
  • CATEGORY
TITLE

【CSS】marginが効かない!marginの相殺とは

SHU[シュウ]

1991年生まれ九州の宮崎県育ち
高校卒業後、愛知県で自動車関係の
お仕事に5年間勤め、WEB業界に
転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画
基本インドアです!笑

シュウ
シュウ
今回は【CSS】marginが効かない!marginの相殺とは
についての解説になります!

こんな方に読んでほしい

  • CSSを学び始めた方へ
  • marginの使い方について学びたい方へ
  • 今回はmarginの相殺についての記事になります

marginとは、文章やコンテンツの余白を指定する際に使われます。
最初に、前回の記事を読んでいただき、marginの指定方法をマスターするのがオススメです。

marginに関する記事

基本的なmarginの指定方法についての記事になります。

要素のボックスモデルについて

要素のボックスモデルについて

ボックスモデルとは要素のもつ領域になります。

各領域の解説
  • 要素の内容
    要素の内容が表示される領域になります。
    widthやheightプロパティでのサイズ指定が可能です
  • padding(パディング)
    要素の内側の余白を取るための領域になります。
    paddingプロパティでの指定が可能です
  • border(ボーダー)
    要素の枠線になります。
    border-widthプロパティでのサイズ指定が可能です
  • margin(マージン)
    外側の余白の領域になります。
    marginプロパティでのサイズ指定が可能です

marginが効かない

marginが効かない

要素Aに対して「margin-bottom: 50px」、要素Bに対して「margin-top: 20px」を指定した際に、
marginが効かないことはありませんでしたか?

marginには「marginの相殺」という現象があります。次の章で詳しく解説していきます。

marginの相殺とは

marginの相殺とは

marginの相殺とは、要素が前後に並び、そのそれぞれにmarginが設定されているときに
おこる現象になります。
少し難しいと思うので、イラストをまじえて解説していきます。

上下に対してmarginを指定した場合

上下に対してmarginを指定した場合

要素それぞれmarginを指定し、要素01は「bottom:50px」、要素02は「top:10px」を指定しています。
50px+10px=60pxになるはずですが、相殺によって、値が小さい方の数値が打ち消されます。

上下に対して

要素01

要素02

<div class="area">
	<p class="box-01">要素01</p>
	<p class="box-02">要素02</p>
</div>
.box-01 {
	/*--margin以外 省略--*/
	margin-bottom: 50px;
}
	
.box-02 {
	/*--margin以外 省略--*/
	margin-top: 10px;
}
上下に対してmarginを指定した場合の解説

上の図のように、値が大きい方の数値が適用されます。

ポイント!
値が大きい方の数値が適用されます。
値が小さい方の数値が打ち消されます。

親子要素に対してmarginを指定した場合

要素それぞれmarginを指定し、親要素は「bottom:10px」、子要素は「bottom:50px」を指定しています。
50px+10px=60pxになるはずですが、相殺によって、値が小さい方の数値が打ち消されます。

親子要素に対して

親要素

子要素

要素

<div class="area">
	<p class="box-01">子要素</p>
</div>
<p class="box-02">要素</p>
.area {
	margin-bottom: 10px;
}
	
.box-01 {
	/*--margin以外 省略--*/
	margin-bottom: 50px;
}
親子要素に対してmarginを指定した場合の解説

先ほどと同様に、値が大きい方の数値が適用されます。
では、どのように対処すればよいのか、次の章で解説していきます。

margin相殺の対処方法について

margin相殺の対処方法について

親要素と子要素に余白をとりたい場合は、
paddingやborderを指定することにより
相殺を防ぐ事ができます。

padding(パディング)による対処法

padding(パディング)による対処法

対処法01:paddingを指定することにより、
子要素と隣接しないようにしています。
marginとの相殺を防ぐ事ができます。

paddingによる対処法

親要素

子要素

要素

<div class="area">
	<p class="box-01">子要素</p>
</div>
<p class="box-02">要素</p>
.area {
    /*--border以外 省略--*/
	margin-bottom: 10px;
	padding-bottom: 10px;
}

border(ボーダー)による対処法

border(ボーダー)による対処法

対処法02:borderを指定することにより、
子要素と隣接しないようにしています。
marginとの相殺を防ぐ事ができます。

borderによる対処法

親要素

子要素

要素

<div class="area">
	<p class="box-01">子要素</p>
</div>
<p class="box-02">要素</p>
.area {
    /*--border以外 省略--*/
	border: 4px solid #ffffff;
}
主な対処法
  • padding marginが指定されている方向を指定
  • border borderを指定
  • overflow hidden, scrollは適用され、auto, visibleは適用されません
  • position absolute, fixedは適用され、relative, staticは適用されません

POINT!
毎回、要素に対して「top、bottom」を指定すると、このように相殺の現象がおこります。
なるべくmarginを「top、bottom」のどちらか一方につけるようにするのがオススメです。
例として基本「bottom」しか指定しない!などルールを決めるのもよいかとおもいます。

marginの相殺が起こらないケース

marginの相殺が起こらないケース

先ほどの解説では垂直方向には相殺が適用されるとのことでしたが、
水平方向でも相殺が適用されるのか解説していきます。

水平方向(左右)のmargin相殺について

水平方向(左右)のmargin相殺について

相殺が起こらないケース01:水平方向(左右)のmarginは相殺が起きず、合算されます。

水平方向(左右)

要素01

要素02

<div class="area">
	<p class="box-01">要素01</p>
	<p class="box-02">要素02</p>
</div>
.box-01 {
	/*--margin以外 省略--*/
	margin-right: 50px;
}
	
.box-02 {
	/*--margin以外 省略--*/
	margin-left: 10px;
}

ネガティブマージンによる相殺について

ネガティブマージンによる相殺について

相殺が起こらないケース02:ネガティブマージンとは、marginの値に-(マイナス)を指定することです。
垂直方向の要素どちらか片方に-(マイナス)が指定した場合、相殺が適用されません。

要素それぞれmarginを指定し、要素は「bottom:50px」、要素は「top:-10px」を指定しています。
50px-10px=40pxになります。大きい値が適用されることはありません。

ネガティブマージン

要素01

要素02

<div class="area">
	<p class="box-01">要素01</p>
	<p class="box-02">要素02</p>
</div>
.box-01 {
	/*--margin以外 省略--*/
	margin-bottom: 50px;
}
	
.box-02 {
	/*--margin以外 省略--*/
	margin-top: -10px;
}

ポイント!
1.水平方向(左右)のmargin相殺は適用されません
2.ネガティブマージンでは、要素どちらか片方にマイナスが指定した場合、相殺が適用されません

まとめ

今回はこれ以上になります。

この記事ではmarginの相殺について詳しく記事を書きました。

POINT
  • 「marginの相殺」は値が大きい方の数値が適用されます。
  • 「marginの相殺」は値が小さい方の数値が打ち消されます。
  • 水平方向(左右)のmargin相殺は適用されません。
  • ネガティブマージンでは、要素どちらか片方にマイナスが指定した場合、相殺が適用されません。
スポンサーリンク

SHU

1991年生まれ九州の宮崎県育ち高校卒業後、愛知県で自動車関係のお仕事に5年間勤め、WEB業界に転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画基本インドアです!笑
つくる、しあわせをテーマとして主にWEBに関する様々な情報を発信しています。

最新記事

関連記事

オススメ記事

月別アーカイブ

page_top