问题描述:
在页面布局的时候,本来想在子元素上设置margin-top,使得子元素和父元素隔开一定的距离,想象中的效果如下图1;结果却不尽如人意,如图2,margin像是加在了父元素上。
使用的代码如下:
HTML
<div class="big">
<div class="small">
</div>
</div>
CSS
*{
padding:0px;
margin: 0px;
}
.big{
width: 200px;
height: 200px;
background-color:red;
}
.small{
width: 100px;
height: 100px;
background-color: blue;
margin-top: 10px;
}
分析原因:
这是因为父元素和子元素的margin发生了和并,父元素的margin是0px,子元素的margin是10px,所以合并后的margin是10px,且加在了父元素上,于是出现了图2的效果。在CSS2.1中对盒模型有如下规定:在垂直方向上,所有毗邻的两个或多个盒元素的margin将会合并。毗邻的意思是:同级或嵌套的盒元素,并且它们之间没有非空内容、padding或border。
合并后的margin的大小取两个发生合并的元素中margin较大的那一个。
更详细的讲,分为几种情况:
1.两个元素为同级元素,即当一个元素出现在另一个元素上面时,第一个元素的margin-bottom与第二个元素的margin-top发生合并,合并后的margin值是margin-bottom和margin-top中较大的那一个
2.当两个元素嵌套,即一个元素包含在另一个元素中时(假设没有padding或border把两个元素的margin分隔开),它们的margin-bottom和/或margin-top也会发生合并,合并后的margin值同样也是margin-bottom和margin-top中较大的那一个;该问题就属于这一种情况。
3.假设有一个空元素,且不设置它的宽高,它有margin-bottom和margin-top,但是没有padding或border。在这种情况下,margin-bottom和margin-top就碰到了一起,它们也会发生合并,合并后的margin值同样也是margin-bottom和margin-top中较大的那一个。
如果这个外边距遇到另一个元素的外边距,它还会发生合并。