HTML空格:<br>之前和之后的空格

tjh*_*nce 15 html css whitespace language-lawyer

我想更好地理解HTML空白处理模型.现在我正在比较两个HTML片段:

<div>a <br>z</div>
Run Code Online (Sandbox Code Playgroud)

<div>a<br> z</div>
Run Code Online (Sandbox Code Playgroud)

第一个片段,当被renered时,产生两行:"a ""z"(所以第一行有一个尾随空格.)

第二个片段产生两行:"a""z".第二行没有前导空间.

我的问题是:为什么?我目前正在使用http://www.w3.org/TR/CSS2/text.html#white-space-model作为参考.它指出

  1. 如果一行开头的空格(U + 0020)将"white-space"设置为"normal","nowrap"或"pre-line",则会将其删除.
  2. 所有选项卡(U + 0009)都呈现为水平移位,使下一个制表符与下一个制表符对齐.制表位于块的起始内容边缘以块的字体呈现的空格宽度(U + 0020)的8倍的倍数处出现.
  3. 如果一行末尾的空格(U + 0020)将"white-space"设置为"normal","nowrap"或"pre-line",它也会被删除.
  4. 如果行末尾的空格(U + 0020)或制表符(U + 0009)将"白色空间"设置为"预换行",则UAs可能会在视觉上将其折叠.

对此的简单解读表明,由于要删除行的开头结尾的空格(当"空格"为"正常"时),我的第一个片段应该不会产生尾随空格.但事实并非如此.

发生什么了?

我现在的理论是,它<br>被秘密地算作一个"角色",在第一个片段中,它阻止尾随空间位于其线的"末端".但我真的不知道.

编辑:要清楚,我知道如何使用随意&nbsp;创建空格.我的问题是关于什么规则(关于某些规范)引发了上述行为.

Xan*_*hir 2

好问题!我已经确认了 Chrome 和 Firefox 中的行为,并确认它与 无关,因为它也是由条件<br>中的普通换行符触发的:white-space: pre-line

<div style="white-space:pre-line">a 
z</div>
Run Code Online (Sandbox Code Playgroud)

我已向列表发送了一封电子邮件,要求澄清此问题,并询问我们是否应该更改规范以匹配实现,或者在浏览器上提交错误以匹配规范。