• ベストアンサー

CSSでのブロック要素に囲み線

下記、記述では#lineと#headerがぴったり重なると思うのですが、ブロック要素(#lineの部分)にborderを設定するとマージンができてしまうのですが、なぜでしょうか?border部分を削除するとぴったり重なります。 <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <style type="text/css" media="screen"><!-- #line { background-color:yellow;border:1px solid #808080;} #header { background-color:#23819e;text-align:center;} --></style> </head> <body> <div id="line"> <div id="header"> <p>aaa</p> </div> </div> </body> </html>

質問者が選んだベストアンサー

  • ベストアンサー
  • xs200
  • ベストアンサー率47% (559/1173)
回答No.1

pにmarginがあるから。 試しに p { margin: 0;} を入れてみてください。 希望通りのデザインにするにはブラウザーがデフォルトで持っているpaddingとmarginは0にします。 ですが * {padding:0; margin:0;} はお勧めしません。必要なものだけイニシャライズしてください。

rootster
質問者

補足

ありがとうございます。確かにmargin:0;だと重なりますが、本来、P要素のマージンであれは、親要素である#headerがマージンの分大きくなるのではないのでしょうか?#headerの方にP要素のデフォルトに該当するpaddingを設定すればよいのでしょうか?

その他の回答 (2)

  • xs200
  • ベストアンサー率47% (559/1173)
回答No.3

??? #header { background-color:#23819e;text-align:center;} を #header { background-color:#23819e;text-align:center;padding: 2em;} とかにすればいいだけだと思うのですが、質問の内容がよく理解できていないようです。私はゼロにリセットしてから必要なところにpadding, marginをつけていくので難しい理屈は考えません。

rootster
質問者

お礼

ありがとうございます。理屈など考えずに、できるような形でやってみます。

  • salonpath
  • ベストアンサー率48% (194/399)
回答No.2

http://www.w3.org/TR/CSS2/box.html#collapsing-margins そうゆう仕様みたいですよ 親要素にpaddingかborderが無ければ子要素のmarginはつぶされて、paddingかborderがあればmarginはつぶされない >In CSS 2.1, horizontal margins never collapse. 左右のmarginは対象外

rootster
質問者

補足

ありがとうございます。paddingかborder~という仕様であれば、仕方ありませんね。ただ、マージンが発生するのは仕方ないとしても、そのマージンを直の親要素につけたいのですが、どのように記述すればよいのでしょう? この場合は#headerの青にしたいのですが、p要素にbackground-colorを設定しても、#headerにマージンをつけたような状態になります。(上下)