CSS中margin边界叠加问题及解决方案

CSS的margin边界叠加深度剖析布局

边界叠加简介post

边界叠加是一个至关简单的概念。可是,在实践中对网页进行布局时,它会形成许多混淆。简单地说,当两个垂直边界相遇时,它们将造成一个边界。这个边界的高度等于两个发生叠加的边界的高度中的较大者。spa

当一个元素出如今另外一个元素上面时,第一个元素的底边界与第二个元素的顶边界发生叠加,见图:code


◆元素的顶边界与前面元素的底边界发生叠加blog

当一个元素包含在另外一个元素中时(假设没有填充或边框将边界分隔开),它们的顶和/或底边界也发生叠加,见图:文档


◆元素的顶边界与父元素的顶边界发生叠加get

尽管初看上去有点儿奇怪,可是边界甚至能够与自己发生叠加。假设有一个空元素,它有边界,可是没有边框或填充。在这种状况下,顶边界与底边界就碰到了一块儿,它们会发生叠加,见图:it

◆元素的顶边界与底边界发生叠加io

若是这个边界碰到另外一个元素的边界,它还会发生叠加,见图:class

◆空元素中已经叠加的边界与另外一个空元素的边界发生叠加

这就是一系列空的段落元素占用的空间很是小的缘由,由于它们的全部边界都叠加到一块儿,造成一个小的边界。

边界叠加初看上去可能有点儿奇怪,可是它其实是有意义的。以由几个段落组成的典型文本页面为例(见图2-8)。第一个段落上面的空间等于段落的顶边界。若是没有边界叠加,后续全部段落之间的边界将是相邻顶边界和底边界的和。这意味着段落之间的空间是页面顶部的两倍。若是发生边界叠加,段落之间的顶边界和底边界就叠加在一块儿,这样各处的距离就一致了。

◆边界叠加在元素之间维护了一致的距离

只有普通文档流中块框的垂直边界才会发生边界叠加。行内框、浮动框或绝对定位框之间的边界不会叠加。

边界叠加的问题

边办叠加是一个若是误解就会致使许多麻烦的CSS特性。请参考div元素内嵌套段落的简单示例:

1 <div id="box"> 
2 <p>Thisparagraphhasa20pxmargin.p> 
3 </div> 

         div框设置了10像素边界,段落设置了20像素的边界:

复制代码
1 #box{  
2 margin:10px;  
3 background-color:#d5d5d5;  
4 }  
5 p{  
6 margin:20px;  
7 background-color:#6699ff;  
8 }  
复制代码

  你会天然地认为产生的样式会像图1-1那样,在段落和div之间有20像素的距离,在div外边围绕着10像素的边界。

  图1-1

                                              

可是,产生的样式实际上像图1-2。

  图1-2

                                              

  这里发生了两个状况。首先,段落的20像素上边界和上边界与div的10像素边界叠加,造成一个单一的20像素垂直边界。其次,这些边界不是被DIV包围,而是突出到DIV的顶部和底部的外边。出现这种状况是因为具备块级子元素的元素计算其高度方式形成的。

若是元素没有垂直边框和填充,那么它的高度就是它包含的子元素的顶部和底部边框边缘之间的距离。所以,包含的子元素的顶部和底部空白边就突出到容器元素的外边。可是,有一个简单的解决方案。经过添加一个垂直边框或填充,空白边就再也不叠了,并且元素的高度就是它包含的子元素的顶部和底部空白边边缘之间的距离。

为了让前面的示例看起来像图1-1这样,只需在div周围添加补白或边框:

复制代码
 1 #box{  
 2 margin:10px;  
 3 padding:1px;/*或者border:1pxsolidcolor;*/  
 4 background-color:#d5d5d5;  
 5 }  
 6 p{  
 7 margin:20px;  
 8 background-color:#6699ff;  
 9 }  
10  
复制代码

  边界叠加的大多数问题能够经过添加透明边框或1px的补白来修复。

      补充解决方案:

        1.外层padding

        2.透明边框border:1pxsolidtransparent;

        3.绝对定位postion:absolute:

        4.外层DIVoverflow:hidden;

        5.内层DIV 加float:left;display:inline;

        6.外层DIV有时会用到zoom:1;

相关文章
相关标签/搜索