新・元地方の中規模印刷会社で苦悩する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
YouTubeとFacebookを連携させる方法

1年以上前の記事です。内容が古い可能性があります。ここのところ連携を止める方法を …

no image
クリックさせるSEO対策

1年以上前の記事です。内容が古い可能性があります。とにかく上位上位と言ったSEO …

PV(ページビュー)>セッション>UU(ユニークユーザー)の法則

1年以上前の記事です。内容が古い可能性があります。そろそろ、PV(ページビュー) …

iPhoneでYouTubeをBGMに使う方法

1年以上前の記事です。内容が古い可能性があります。iPhone(アイフォーン)で …

YouTubeでアップロード中にソーシャルゲーム(ソシャゲ)プレイは注意。通信エラーで最悪データ破壊も

1年以上前の記事です。内容が古い可能性があります。たぶん、パズドラだけじゃなくて …

タスクマネージャーでプロセスを調べてみた part2

1年以上前の記事です。内容が古い可能性があります。今度は会社で代替機として使って …

no image
自分で作った顔文字を辞書登録する方法【iPhone】

1年以上前の記事です。内容が古い可能性があります。これは目からウロコなiPhon …

no image
ページランクまとめ

1年以上前の記事です。内容が古い可能性があります。過去ログみてもページランクの仕 …

「Google+ページ」を削除する方法

1年以上前の記事です。内容が古い可能性があります。作る方法を伝えても削除する方法 …

no image
ワード(Word)の隠し文字の使い方

1年以上前の記事です。内容が古い可能性があります。パソコン教室でワード(Word …

血液型オヤジ