避免在Chrome中换行之前在尾随空格下划线

ky

以下代码段在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在自动换行文本时如何处理尾随空格不一致。

有关在包装的文本状态处理尾随空格的CSS规范

4.1.3。第二阶段:修剪和定位

当每一行都布置好后,

  1. 删除了一行开头的一系列可折叠空间。
  2. 如果选项卡大小为零,则不呈现选项卡。否则,每个选项卡将呈现为一个水平移位,该水平移位将下一个字形的起始边缘与下一个选项卡的停靠点对齐。制表位停在从块的起始内容边缘开始的制表位大小倍数的点处。选项卡的大小由tab-size属性给定。
  3. 删除了一行结尾处的一系列可折叠空间。
  4. 如果行末尾的空格或制表符不可折叠,但设置了空白以预包装,则UA必须悬挂空白或以视觉方式折叠任何溢出空格的字符前进宽度,以免它们占用排队的空间。但是,如果将溢出包装设置为分隔符,则不允许折叠其前进宽度,因为这将防止保留的空格被包装。

CSS工作组在他们的github仓库上讨论了尾随空格的不一致处理,特别提到了Firefox对尾随空白的处理是最理想的:

最后要指出的是,尾随空格看起来很糟糕,并且在inline的结束标记内或a之前有一个空格<br>是一种相当普遍的无意标记模式,不会对渲染产生不良影响。内联样式化时(如@palemieux给出的示例),以及当我们选择除start之外的其他文本对齐方式时,保留的尾随空格都会变得明显。这给出了一个实际的用例,表明了对Firefox行为的偏好。

通过这次讨论,前面提到的CSS规范已经更新(在github存储库中,但尚未发布),以匹配Firefox(Gecko)行为。将第1点和第3点从上方具体更新为:

删除了一行开始处的一系列可折叠空格(忽略任何中间行内框边界)

删除了一行结尾处的一系列可折叠空间(忽略任何中间的行内框边界)

强调我添加的更改。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用Java脚本中的下划线替换初始空格

用列名中的下划线动态替换空格

在句号之前,下划线或空格之后使用R中的正则表达式提取字符串

如果空格/换行符不在前后,请用下划线替换每个点

虚线下划线在Chrome中无法正确显示

如何用下划线替换空格?

用下划线代替空格

用下划线替换空格?

载波:使用空格代替下划线

从文本到下划线的填充或空格

用下划线 jQuery 替换空格

用空格替换下划线

vim避免选择下划线

上传时避免在文件名中用下划线替换空格

pyQGIS中的下划线

NodeJS中的双下划线与单下划线

正则表达式:捕获行之间的文本,包括换行符,空格和下划线字符

JavaScript $ .trim但不包含空格:下划线/下划线

如何从kdb中的字符串中删除空格和下划线?

strings.xml:如何从<u>标记前面的空格中删除下划线?

在字符串中插入下划线代替单个或多个空格(连续)

用下划线替换正则表达式匹配中的空格

用空格替换 df 名称中的所有下划线

将功能名称中的所有下划线替换为空格

如何在JavaScript中以特殊字符开头的单词内的空格替换下划线?

在javascript中替换(_)下划线所有点以空格(.)继续

如何在 Ruby on Rails 中打印 CSV 时将下划线变成空格?

写入dae时,Scenekit会在节点名称中自动为空格插入下划线

用下划线替换 PySpark 中数组元素内的空格