根据规范和浏览器,当空的行内元素呈现边距时是在什么情况下?以下代码已在Chrome(Webkit)中进行了测试。
这段代码不显示边距:
<p>Example <span style="margin:2em"> </span>Example</p>
而这段代码的作用是:
<p>Example <span style="margin:2em"></span>Example</p>
我知道在第一个例子中,空白被压缩了,但这应该使其等同于第二个例子吧?那么为什么会这样,以及何时会出现这种情况?
根据规范和浏览器,当空的行内元素呈现边距时是在什么情况下?以下代码已在Chrome(Webkit)中进行了测试。
这段代码不显示边距:
<p>Example <span style="margin:2em"> </span>Example</p>
而这段代码的作用是:
<p>Example <span style="margin:2em"></span>Example</p>
我知道在第一个例子中,空白被压缩了,但这应该使其等同于第二个例子吧?那么为什么会这样,以及何时会出现这种情况?
删除跟在另一个空格(U+0020)后面的任何空格(U+0020),即使是行内元素前的空格,如果该空格的'white-space'设置为'normal'、'nowrap'或'pre-line'也删除它。
对于您的第一个元素,这应该导致一个空元素。一个空的行内元素仍然应该生成一个空框,尽管宽度为零,因为没有内容,且边距仍然会生效,因为框始终被呈现:
空的行内元素生成空的行内框,但这些框仍具有边距、填充、边框和行高,因此像带有内容的元素一样影响这些计算。
根据Chrome的Web Inspector显示,它似乎无法完整地为元素生成框,因为它会将元素中的空格折叠到紧挨着它的空格中。当元素在源代码中为空时,它会正确生成带有边距的空框。所有其他浏览器在执行空格折叠后,都没有问题地绘制出一个空框,并且规范中没有说明如果通过空格折叠过程使非匿名框变为空,则删除该框,因此我会说这是Chrome的一个错误。
如评论中所述,最新版本的Chrome也受到了影响,它使用了Blink。 Blink毕竟是WebKit的一个分支,所以不难看到大多数困扰WebKit的CSS2.1错误在Blink中尚未修复。