2011-06-03 67 views
1

对于CSS,我们知道,垂直边距崩溃,如例子:对于CSS,垂直边距会崩溃,但为什么浮动的div不会折叠垂直边距?

http://jsfiddle.net/rbxL7/5/

(的div之间的垂直边距仅为30像素。)

但对于浮动的div?为什么垂直边界不会崩溃?

例如:http://jsfiddle.net/rbxL7/3/

(的div之间的水平和垂直边缘都最终成为60像素)。

+0

你是要问一个原因还是修复? – Petah 2011-06-03 01:53:53

+0

原因,如“为什么” – 2011-06-03 01:57:22

+1

我想修复。 – Moss 2012-08-25 07:50:59

回答

5

According to W3C

在CSS中,两个相邻的边距 或更多的盒子(可能或可能不是兄弟姐妹)可以组合形成一个单独的保证金。

和...

两个空间被相邻的,当且仅当 :

1)都属于在流块级 的箱子,参与同 块格式化上下文

which leads to。 ..

浮标,绝对定位元素,块容器(如 直列块,表细胞和 表字幕)未阻断 盒,和块盒用“溢出” 比“可见的”(当 值已经传播到 视除外),其他建立新的块 格式上下文为他们 内容

+0

所以...为什么这个推理...或基本上它是说:“浮动divs垂直边缘不会崩溃” – 2011-06-03 02:02:18

+0

是的,“浮动divs垂直边缘不崩溃”是短版本:-) – ataddeini 2011-06-03 02:03:37

+0

另一个短版本将是利润率只折叠的项目在相同块格式化上下文和浮动块创建一个新的块格式上下文。 – ataddeini 2011-06-03 02:04:34

1

你可以试试这个:

.outer { width: 600px; border: 1px dashed blue; overflow: hidden } /* overflow: hidden is to clear the float if any */ 
.inner { float: left; width: 200px; height: 200px; border: 1px dashed orange; margin: 30px 0 0 30px; } 
.outer .inner:last-child { margin: 30px; } 

(如果你的目标浏览器不支持last-child,然后添加一个类的最后一个子)

http://jsfiddle.net/rbxL7/6/

+0

它不是如何使它30px。它是“为什么” – 2011-06-03 01:58:48

+0

是的,但它可能会帮助别人谁在这个答案绊倒 – Petah 2011-06-03 02:01:05