HTML空格:在

时间:2015-09-10 04:55:43

标签: html css whitespace language-lawyer

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

<div>a <br>z</div>

<div>a<br> z</div>

第一个代码段在被撤消时产生两行:"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.   
  3. 所有标签(U + 0009)都呈现为水平移位,使下一个标签符号位于下一个标志符号的起始边缘。制表位于块的起始内容边缘以块的字体呈现的空格宽度(U + 0020)的8倍的倍数处出现。
  4.   
  5. 如果一行末尾的空格(U + 0020)将“空格”设置为“正常”,“现在”或“预行”,则也会将其删除。
  6.   
  7. 如果行末尾的空格(U + 0020)或制表符(U + 0009)将“white-space”设置为“pre-wrap”,则UAs可能会在视觉上将其折叠。
  8.   

对此的简单解读表明,由于要删除行的开头结尾的空格(当'white-space'为'normal'时),我的片段不应该导致没有尾随空格。但事实并非如此。

那是怎么回事?

我目前的理论是<br>被秘密地算作一个“字符”,在第一个片段中,它阻止尾随空间位于其行的“末端”。但我真的不知道。

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

1 个答案:

答案 0 :(得分:2)

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

<div style="white-space:pre-line">a 
z</div>

sent an email to the list要求澄清此问题,并询问我们是否应更改规范以匹配实施,或在浏览器上提交错误以符合规范。