以下代码段在Firefox 59中正确呈现(假定)而没有在下划线处留下空格,但是在Chromium 65中,呈现显式换行符之前行末的虚假空间:
<div style="width:100px">
<a href="#">This is long link, <br />with a line break</a>
</div>
Chromium 65的屏幕截图:
Firefox 59的屏幕截图:
解决此问题的明显方法是删除换行符前面的空间,但这是不自然的。
渲染之一不对吗?是由HTML还是CSS规范指定的行为,还是真的未定义?
编辑1:在IE中也可以观察到与Firefox中相同的行为,因此看起来Chromium是唯一的行为。
问题不是Chrome强调了尾随空间,而Firefox却没有。问题在于,当换行时(当换行来自硬<br />
换行时),Chrome不会删除尾随空格。该空格带有下划线,因为它在那里,这与Chrome在自动换行文本时如何处理尾随空格不一致。
4.1.3。第二阶段:修剪和定位
当每一行都布置好后,
- 删除了一行开头的一系列可折叠空间。
- 如果选项卡大小为零,则不呈现选项卡。否则,每个选项卡将呈现为一个水平移位,该水平移位将下一个字形的起始边缘与下一个选项卡的停靠点对齐。制表位停在从块的起始内容边缘开始的制表位大小倍数的点处。选项卡的大小由tab-size属性给定。
- 删除了一行结尾处的一系列可折叠空间。
- 如果行末尾的空格或制表符不可折叠,但设置了空白以预包装,则UA必须悬挂空白或以视觉方式折叠任何溢出空格的字符前进宽度,以免它们占用排队的空间。但是,如果将溢出包装设置为分隔符,则不允许折叠其前进宽度,因为这将防止保留的空格被包装。
CSS工作组在他们的github仓库上讨论了尾随空格的不一致处理,特别提到了Firefox对尾随空白的处理是最理想的:
最后要指出的是,尾随空格看起来很糟糕,并且在inline的结束标记内或a之前有一个空格
<br>
是一种相当普遍的无意标记模式,不会对渲染产生不良影响。内联样式化时(如@palemieux给出的示例),以及当我们选择除start之外的其他文本对齐方式时,保留的尾随空格都会变得明显。这给出了一个实际的用例,表明了对Firefox行为的偏好。
通过这次讨论,前面提到的CSS规范已经更新(在github存储库中,但尚未发布),以匹配Firefox(Gecko)行为。将第1点和第3点从上方具体更新为:
删除了一行开始处的一系列可折叠空格(忽略任何中间行内框边界)。
删除了一行结尾处的一系列可折叠空间(忽略任何中间的行内框边界)。
强调我添加的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句