我正在尝试理解margin对两个元素的影响。我有以下HTML,参见dabblet:
<p>some text</p>
<pre>some code</pre>
我有以下CSS代码:
body { color: white; }
p { background: red; margin-bottom: 50px; padding: 20px; }
pre { background: purple; margin-top: 40px; padding: 20px; }
所以我已经给段落标记添加了50像素的底部边距,给pre标记添加了40像素的顶部边距。因此,我期望它们之间有90像素的垂直距离,但实际上只有50像素。
我知道这是因为 边距合并,如果想要解决这个问题,我需要在pre标签中添加
display: inline-block
。但是这会导致pre标签的宽度合并。同样地,我知道我可以通过在pre标签中添加
width: 100%
来解决宽度问题,但是我在pre标签上使用了padding (20px),因此这会导致我的元素太宽。我知道可以使用box-sizing来解决这个问题,但是必须通过调整宽度、显示和盒模型属性来获得所需的垂直间距留下了许多麻烦。所以我不想再试了。相反,我决定只需向pre标记添加
margin-top: 90px
,这将确保我获得所需的90像素空间。我的问题是:是否存在任何浏览器不会折叠边距? 我会无意中得到140像素的空间(从pre标记的顶部边距90像素+段落标记的底部边距50像素)吗?换句话说,边距在所有浏览器中都是可靠和一致的,还是有一些浏览器会有自己的处理方式?
clear
不完全等同于“清除”。只有当元素的清除导致元素向垂直方向移动时,才会发生清除。当这种情况发生时,它会对边距折叠产生影响。要查看其效果,请比较在 IE 或 Firefox 中 http://jsfiddle.net/07vm3189/ 的效果与 Chrome 中的效果。IE/Firefox 的行为是正确的,并且我在回答 这个问题 中对此进行了更详细的讨论。 - Alohci