来源:http://www.ido321.com/387.html
<!DOCTYPEHTML PUBLIC"-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title></title> <metaname=""content=""> <style> *{ margin:0px; padding:0px; } #no1{ background:#808000; 300px; height:300px; margin:100px 0 0 100px; } #no2{ background:#c0c0c0; 150px; height:150px; margin-left:20px; margin-top:30px; } </style> </head> <body> <div id="no1"> <div id="no2">Span2</div> </div> </body> </html>
假设您觉得应该是这种话:
那就错了。
结果是这种:
由于CSS中存在一个margin collapse,即边界塌陷或者说边界重叠。对于上下两个并列
的div块而言。上面div的margin-bottom和以下div的margin- top会塌陷。也就是会取上下
两者margin里最大值作为显示值,所以从这个意义上说:CSS及浏览器的设计者们希望
我们在布局时。假设遇到上下两个并排内容块的安排,最好仅仅设置当中每一个块上或下
margin的一处就可以。w3school也规定:当两个垂直外边距相遇时。它们将形成一个外
边距。合并后的外边距的高度等于两个发生合并的外边距的高度中的较大者。
但对于父块DIV内含子块DIV的情况。就会按还有一条CSS惯例来解释了。那就是:对于
有块级子元素的元素计算高度的方式,假设元素没有垂直边框和填充,那其高度就是其子
元素顶部和底部边框边缘之间的距离。所以对于代码:
1: <div class="father"></div>
father这个div的高度为0,由于里面没有可以撑开div的内容。假设变为:
1: <div class="father">I am here.</div>
则高度就是文字的高度,由于此时文字在撑着这个DIV。
话说回来,一个DIV和它的子DIV特别重视垂直边框或填充,也就好像是,一口锅。里
面放个盆,能不能扣住里面的盆。主要看锅盖了,垂直边框或填充就是这个“锅盖”。于
是解决的方式至少有下面三种:
1、须要给父div设置边框,当然能够设置边框为透明:
1: border:1px solid transparent
2: 或
3: border-top:1px solid transparent
2、为父DIV加入padding,或者至少加入padding-top;
1: padding:1px
2: 或
3: padding-top:1px; /*必须大于0*/
3、为父DIV加入overflow:hidden
1: over-flow:hidden;