为什么浏览器将换行符呈现为空格?


74

最长的时间,我想了解为什么浏览器在呈现的HTML元素之间存在换行符时在它们之间添加空白区域,例如:

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

上面的html将输出“ HelloWorld”字符串在“ Hello”和“ World”之间没有空格,但是在以下示例中:

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

上面的html将输出“ Hello World”字符串在“ Hello”和“ World”之间一个空格。

现在,我可以毫无疑问地接受这只是工作周期的方式,但是令我有些烦恼的是,我总是觉得html元素之间的空格(或换行符)在何时不重要。浏览器将html呈现给用户。

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

谢谢。

Answers:


73

呈现时,浏览器将多个空格字符(包括换行符)压缩为一个空格。唯一的例外是<pre>元素内或CSS属性white-space设置为pre或的元素内pre-wrap。(或在XHTML中,xml:space="preserve"属性。)


1
white-space: pre-line;
Andrew Evt

据我所知,@ AndrewEvtpre-line仍然会导致多个空格被折叠,除了换行符。尽管您的评论确实使我找到了pre-wrap
David Z

55

块元素之间的空白将被忽略。但是,内联元素之间的空白将转换为一个空间。原因是内联元素可能会插入父元素的常规内部文本。

考虑以下示例:

<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>

如果将它与前面的示例保持一致会更好。


我遇到同样的问题时就遇到了这个问题。好的,解释性的答案。如果浏览器在上例中的跨度之间需要一个空格,而不考虑换行的话,那就太好了。我知道诸如Sublime之类的文本编辑器可能会出现问题,可以将其剪裁成空白,但这对我来说更有意义。难道不能归结为doctype(过渡,字符串等)吗?我的意思是我们托管了许多使用相同标记的网站,但我发现某些网站上的空白比其他网站上的空白更多。如果文档类型是原因,我将密切注意。
ClarkeyBoy 2012年


5

您可以使用html注释标签连接代码,以免出现空格。

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

3

如果在两个标签之间有字符“ a”,则希望它被渲染。在这种情况下,两个标签之间有一个字符“ \ n”;行为相似且一致('\ n'呈现为单个空格)。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.