为什么浏览器渲染一个换行符作为空间?

最长的时间,我想知道为什么浏览器之间添加一个NewLine时,为渲染的HTML元素之间添加一个空的空间,例如:

<span>Hello</span><span>World</span> 

上面的html会输出“HelloWorld”string, 在“Hello”和“World”之间没有空格,但是在下面的例子中:

 <span>Hello</span> <span>World</span> 

上面的html会输出一个“Hello World”string在“Hello”和“World”之间一个空格。

现在,我毫不犹豫地认为这只是它工作的方式,但是有一点让我感到困惑的是,我始终觉得html元素之间的空格(或换行符)在当时并不重要浏览器将html呈现给用户。

所以我的问题是,如果有人知道这个行为背后的哲学或技术原因。

谢谢。

在渲染时,浏览器将多个空白字符(包括换行符)压缩到单个空间。 唯一的例外是在<pre>元素或那些具有CSS属性white-space: pre set的元素中。 (或者在XHTML中, xml:space="preserve"属性。)

块元素之间的空白被忽略。 但是,内联元素之间的空格被转换为一个空格。 理由是内联元素可能会散布在父元素的常规内部文本中。

考虑下面的例子:

 <p>This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example</p> 

在理想情况下,您希望用户看到

 This is my colored Hello World example 

删除两个跨度之间的空白将导致:

 This is my colored HelloWorld example 

但同样的样本可以由作者(与OCD有关的HTML格式:-))重写为:

 <p> This is my colored <span class="red_text">Hello</span> <span class="blue_text">World</span> example </p> 

如果这与前面的例子一致,那将会更好。

HTML被指定为这样做:

换行符也是空白字符

http://www.w3.org/TR/REC-html40/struct/text.html#h-9.1

如果你在两个标签之间有字符“a”,你会期望它被渲染。 在这种情况下,两个标签之间有一个字符“\ n” 行为是类似的,并且一致('\ n'呈现为单个空格)。

浏览器在这里犯了一个错误:

http://www.w3.org/TR/html4/appendix/notes.html#hB.3.1

SGML(参见[ISO8879],第7.6.1节)指定紧跟在开始标签之后的换行必须被忽略,因为必须在结束标签之前立即换行。 这适用于所有的HTML元素,毫无例外。