为什么浏览器渲染一个换行符作为空间?
最长的时间,我想知道为什么浏览器之间添加一个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>
如果这与前面的例子一致,那将会更好。
如果你在两个标签之间有字符“a”,你会期望它被渲染。 在这种情况下,两个标签之间有一个字符“\ n” 行为是类似的,并且一致('\ n'呈现为单个空格)。
浏览器在这里犯了一个错误:
http://www.w3.org/TR/html4/appendix/notes.html#hB.3.1
SGML(参见[ISO8879],第7.6.1节)指定紧跟在开始标签之后的换行必须被忽略,因为必须在结束标签之前立即换行。 这适用于所有的HTML元素,毫无例外。