何时在空内联元素上渲染边距?

时间:2013-11-19 04:37:58

标签: html css

根据规格和浏览器,边距元素在空内联元素上渲染时会是什么时候?以下代码已在chrome(webkit)中进行了测试。

此代码不显示保证金:

<p>Example <span style="margin:2em"> </span>Example</p>

这段代码确实:

<p>Example <span style="margin:2em"></span>Example</p>

据我所知,在第一个示例中,空白区域已折叠,但这应该与第二个示例相同?那么为什么&amp;当?

Fiddle

1 个答案:

答案 0 :(得分:6)

规范说whitespace should be collapsed即使内联元素在空白后开始并以空格开头(即开头标记出现在空白的中间,就像在第一个span元素中一样):

  

在另一个空格(U + 0020)之后的任何空间(U + 0020) - 即使是内联之前的空格,如果该空间也将“白色空间”设置为“正常”,“现在”或“预先行” ' - 被删除。

对于您的第一个span元素,这应该会产生一个空元素。 An empty inline element should still generate an empty box,虽然宽度为零,因为内部没有任何内容,并且边距应该仍然有效,因为框始终呈现:

  

空内联元素会生成空的内联框,但这些框仍然有边距,填充,边框和线条高度,从而影响这些计算,就像带有内容的元素一样。

根据Chrome的Web Inspector,看起来它没有完全生成span元素的框,因为它将元素中的空间折叠到它之前的空间中。当源中的span元素为空时,它会生成一个带有边距的空框。所有其他浏览器在执行空格折叠后绘制一个空框都没有问题,并且规范没有说明删除非匿名框如果它被空白崩溃的过程变为空,那么我会说这是Chrome错误。

正如评论中所述,此问题也会影响最新版本的Chrome,它们使用Blink。毕竟Blink是WebKit的一个分支,所以看到困扰WebKit的大多数CSS2.1漏洞还没有在Blink中得到修复就不足为奇了。