为什么浏览器不会呈现由"white-space:pre"元素中的尾部换行符引起的换行符?

Dec*_*oon 5 html css html5

这两个div都呈现相同的效果.为什么呈现前导换行符而不是尾随换行符(在第二个div中)?我阅读了CSS3规范中的Line Breaking和Word Boundaries部分,但它没有解释这种行为.

.pre {
  white-space: pre;
  border: 1px solid red;
  margin-bottom: 10px;
}
Run Code Online (Sandbox Code Playgroud)
<div class="pre">
hello
world</div>

<div class="pre">
hello
world
</div>
Run Code Online (Sandbox Code Playgroud)

Mr *_*ter 5

为什么?嗯,显然是为了避免兼容性问题。

W3C表示

为了避免 SGML 换行规则的问题以及现有实现之间的不一致,作者不应依赖用户代理在开始标记之后或结束标记之前立即渲染空白。

并且

请注意,在[对空白属性的值]进行这些检查之前,空白处理规则已经删除了分段后的所有制表符和空格。

现在还不清楚如果允许浏览器在结束标记之前保留空格,到底会引入哪些不一致,但你已经知道了。

  • 在操作示例中,有一个空白/中断,不会被渲染。如果有 2 个换行符,则将渲染一个换行符并删除最后一个换行符。W3C 对我来说似乎很清楚:) (2认同)