我想更好地理解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作为参考。它声明
- 如果一行开头的空格(U + 0020)将“white-space”设置为“normal”,“nowrap”或“pre-line”,则会将其删除。
- 所有标签(U + 0009)都呈现为水平移位,使下一个标签符号位于下一个标志符号的起始边缘。制表位于块的起始内容边缘以块的字体呈现的空格宽度(U + 0020)的8倍的倍数处出现。
- 如果一行末尾的空格(U + 0020)将“空格”设置为“正常”,“现在”或“预行”,则也会将其删除。
- 如果行末尾的空格(U + 0020)或制表符(U + 0009)将“white-space”设置为“pre-wrap”,则UAs可能会在视觉上将其折叠。
醇>
对此的简单解读表明,由于要删除行的开头或结尾的空格(当'white-space'为'normal'时),我的片段不应该导致没有尾随空格。但事实并非如此。
那是怎么回事?
我目前的理论是<br>
被秘密地算作一个“字符”,在第一个片段中,它阻止尾随空间位于其行的“末端”。但我真的不知道。
编辑:要清楚,我知道如何使用
随意创建空格。我的问题是关于什么规则(关于某些规范)会导致上述行为。
答案 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要求澄清此问题,并询问我们是否应更改规范以匹配实施,或在浏览器上提交错误以符合规范。