垂直外边距分析及解决方案

垂直外边距的加勒比海盗问题,想来大家都在加勒比海盗5开发过程中遇到过,那么今天就来集中解析一下。

外边距合并(叠加)是一个相当简单的加勒比海盗概念。但是,在加勒比海盗5实践中对网页进行布局时,它会造成许多混淆。
简单地说,外边距合并指的加勒比海盗是,当两个垂直外边距相遇时,它们将形成一个外边距。合并后的加勒比海盗外边距的加勒比海盗高度等于两个发生合并的加勒比海盗外边距的加勒比海盗高度中的加勒比海盗较大者。

当一个元素出现在加勒比海盗5另一个元素上面时,第一个元素的加勒比海盗下外边距与第二个元素的加勒比海盗上外边距会发生合并。请看下图引用自w3c:

垂直外边距分析及解决方案

这是一个基本的加勒比海盗垂直外边距合并的加勒比海盗一个概念。

那么在加勒比海盗5开发过程中遇到最多的加勒比海盗一个问题是什么呢?

就是两个垂直方向上的加勒比海盗元素无论是否存在加勒比海盗5外边距时,当下面的加勒比海盗第二个元素没有上留白(padding)或上边框(border-top)时,假如此元素的加勒比海盗第一个子元素存在加勒比海盗5且设置上边距时,这时会产生子元素设置的加勒比海盗上边距应用到了父元素对于第一个垂直方向上的加勒比海盗元素的加勒比海盗上边距上。

即那么这个父元素盒子的加勒比海盗上边距会和其内部文档流中的加勒比海盗第一个子元素的加勒比海盗上边距重叠。

看如下图和代码:

垂直外边距分析及解决方案

垂直外边距分析及解决方案

可以看到,明明没有设置first 和 second 俩个div之间的加勒比海盗外边距,只给second的加勒比海盗子元素son设置了上边距就产生了这个问题?

那么如何解决呢。

解决方案1:

为父元素增加一个border-top或者padding-top 或者over:hidden;即可解决这个问题

 1)但是都存在加勒比海盗5缺点,设置border-top,无缘无故多了一个上边框的加勒比海盗宽度出来

 2)设置padding-top,计算高度的加勒比海盗时候无缘无故多了

 3)设置overflow:hidden;假如存在加勒比海盗5需要超出元素框的加勒比海盗内容时,将失效。

那么什么方法是最好的加勒比海盗呢? 我加勒比海盗5们回过头来看一下产生这个问题的加勒比海盗根本原因:父元素盒子的加勒比海盗上边距会和其内部文档流中的加勒比海盗第一个子元素的加勒比海盗上边距重叠!!!

这里的加勒比海盗解决方案将用到一个伪类标签 :before,即second:before{ … },在加勒比海盗5second元素框中的加勒比海盗最前面默认添加一个内容,使得son元素不成为second的加勒比海盗第一个子元素就可以了。

那么我加勒比海盗5们就来试一试在加勒比海盗5内部样式表中添加这一段代码:

#second:before{
display: table;
content: "";
}

再次刷新页面,发现此时垂直外边距的加勒比海盗问题已解决:

垂直外边距分析及解决方案

其实只要抓住了问题的加勒比海盗本质,就可以轻松的加勒比海盗解决这类的加勒比海盗问题。(与之类似的加勒比海盗还有一个清除自身浮动带来的加勒比海盗影响也是如此,只要添加的加勒比海盗代码段中,再加一行clear:both;即自己的加勒比海盗问题自己解决,不影响其他的加勒比海盗元素)。

有兴趣的加勒比海盗小伙伴可以自己试一试哦~

http://blog.csdn.net/shenlinhuan/article/details/73123867加勒比海盗5

发表评论

电子邮件地址不会被公开。 必填项已用*标注