新・元地方の中規模印刷会社で苦悩するWebデザイナー改めWebディレクターの日記

自由な20代、窮屈な30代を経て、遂に40代になっちまったWebディレクター&パソコン講師の覚書と思う言(こと)。略称【ちほちゅう】

*

内包されたDIVにmarginを設定すると親要素にも同じマージンが設定されることがある【CSS】

   

  • このエントリーをはてなブックマークに追加

1年以上前の記事です。内容が古い可能性があります。

これはわからんわ。

生徒さんの一人が陥った罠。
先生も知りませんでしたごめんなさい。

□ 【CSS Tips】ネストされたボックス要素のmargin-topのブラウザ毎の解釈の違い-Margin Collapsing – Awaresoft

空でないコンテンツ、ボーダー、パディングまたはclearで分けられていない、並列またはネストによって隣接した二つ以上のボックスのマージンは結合されて一つになる。

スポンサーリンク
 

具体的に説明していこうと思います。
まずは、以下のソースを御覧ください。

□ HTML

<div id=”wrapper”>
  <div id=”header”> ヘッダー  </div>
  <div id=”content”> コンテンツ  </div>
  <div id=”footer”> フッター  </div>
</div>

□ CSS

#wrapper {
width: 500px;
margin: auto;
background-color: #CCC;
}
#header {
height: 100px;
background-color: #FCF;
}
#content {
height: 200px;
background-color: #FFC;
}
#footer {
height: 100px;
background-color: #CFF;
}

□ プレビュー
margin-topの謎(初期値)

ここで、CSSを以下のように書き足してみます。(書き足し部分は赤字)

#wrapper {
width: 500px;
margin: auto;
background-color: #CCC;
}
#header {
height: 100px;
background-color: #FCF;
margin-top: 50px;
}
#content {
height: 200px;
background-color: #FFC;
}
#footer {
height: 100px;
background-color: #CFF;
}

さて、これがどんなふうに表示されるかご想像ください。
2択です。

□ プレビュー1
margin-topの謎(予想)

□ プレビュー2
margin-topの謎(実際)

おそらく多くの人はプレビュー1が正解だと思うと思います。
margin-topの設定を入れているのがheaderですからね。
ただ、これの正解はプレビュー2になります。

理由は前述のブログ引用の通り空でないコンテンツ、ボーダー、パディングまたはclearで分けられていない、並列またはネストによって隣接した二つ以上のボックスのマージンは結合されて一つになるという「仕様」だから。

では、プレビュー1のように表示させるにはどうしたらいいか。
賢明な方はheaderにmargin-topでなく、wrapperにpadding-topの設定をすればいいと気付きます。
ただ、ここはあえて現状のCSS及びHTMLに何か書き加えることでなんとかやっていこうと思います。

1. HTML上のwrapperに何か書き込む。

□ ソース

<div id=”wrapper”>ラッパー
  <div id=”header”> ヘッダー  </div>
  <div id=”content”> コンテンツ  </div>
  <div id=”footer”> フッター  </div>
</div>

□ プレビュー
margin-topの謎(修正1)

2. CSSでwrapperにboaderの設定をする。

□ ソース

#wrapper {
width: 500px;
margin: auto;
background-color: #CCC;
border: 1px solid #999;
}
#header {
height: 100px;
background-color: #FCF;
margin-top: 50px;
}
#content {
height: 200px;
background-color: #FFC;
}
#footer {
height: 100px;
background-color: #CFF;
}

□ プレビュー
margin-topの謎(修正2)

CSSでwrapperにpaddingの設定をする。

□ ソース

#wrapper {
width: 500px;
margin: auto;
background-color: #CCC;
padding: 1px;
}
#header {
height: 100px;
background-color: #FCF;
margin-top: 50px;
}
#content {
height: 200px;
background-color: #FFC;
}
#footer {
height: 100px;
background-color: #CFF;
}

□ プレビュー 
margin-topの謎(修正3)

と、どれも見た目がちょっとだけ変わっちゃうんですよね。
HTMLで完全な空白ブランクを入れちゃうというのもありますがいまいちだし。。

だもんで、最初に思いついたようにwrapperにpadding-topを設定するのがやっぱり一番でしょう。

□ ソース

#wrapper {
width: 500px;
margin: auto;
background-color: #CCC;
padding-top: 50px;
}
#header {
height: 100px;
background-color: #FCF;
}
#content {
height: 200px;
background-color: #FFC;
}
#footer {
height: 100px;
background-color: #CFF;
}

□ プレビュー 
margin-topの謎(予想)

CSSもまだまだ奥が深い。
これで、CSS3が使われ始めたら、またいろいろと覚えなければならないことが出てくるんでしょうねぇ。 

 - デザイン, 覚え書き

アドセンス広告メイン

Message

メールアドレスが公開されることはありません。

  関連記事

no image
Flickr(フリッカー)とFacebook(フェイスブック)を連携させる方法

1年以上前の記事です。内容が古い可能性があります。連携好きの僕が来ましたよ。今回 …

エイサーASPIRE ONEのモニターは赤の発色が悪い

1年以上前の記事です。内容が古い可能性があります。タイトルどおりです。 ASPI …

債権回収詐欺(ヤミ金騒動)に巻き込まれて学んだこと、感じたこと【まとめ】

1年以上前の記事です。内容が古い可能性があります。今まで何度か書いてきた債権回収 …

モニターを一瞬で黒一色にする方法(物撮りに便利)

1年以上前の記事です。内容が古い可能性があります。ちょくちょく缶コーヒーや缶ビー …

科学的に証明されている不幸になる行動。SNSをやらたと見る、いつも忙しくする、等

1年以上前の記事です。内容が古い可能性があります。以下の行動をついついとってしま …

「use strict」に対応させる簡単な改造方法【perl】

1年以上前の記事です。内容が古い可能性があります。色々なところでperlのプログ …

WordPress(ワードプレス)を会員制のサイトにする方法1 #wp

1年以上前の記事です。内容が古い可能性があります。ここではサイト全体を会員制にし …

no image
ネットと法律(名誉毀損罪)

1年以上前の記事です。内容が古い可能性があります。お昼の番組でネットのカキコミに …

「PDCA」やら「AIDMA」やら「AISAS」やら

1年以上前の記事です。内容が古い可能性があります。最近、ちょっとしたことで抜ける …

ノート経由のブログ連携終了につき「RSS Graffiti」にてブログ連携【Facebook】

1年以上前の記事です。内容が古い可能性があります。今までブログをFacebook …

血液型オヤジ