关闭斜杠前的空格?

115

我经常看到XML和HTML标签中在结束斜杠前有一个空格。 XHTML的换行标记可能是典型的例子:

<br />

改为:

<br/>

这个空格看起来是多余的。事实上,我认为它是多余的。

写这个空格的原因是什么?

我读过这个空格解决了一些“向后兼容问题”。具体是哪些向后兼容问题?这些问题是否仍然相关,或者我们仍在出于某些原因(例如 IE3 兼容性)添加额外的空格?是否存在某些规范对此有明确的答案?

如果不是为了向后兼容,那么它是可读性问题吗?类似于“大括号放哪里”之争?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

我可以尊重不同的风格观点,所以如果写空格只是一种口味问题,我会很高兴学习。


5
我已经习惯了这样,觉得使用 "<br />" 比 "<br/>" 更好看。 - mk12
8个回答

73
答案是人们希望遵循XHTML1.0规范的附录C。只有当您将XHTML作为text/html提供时才需要这样做。大多数人都这样做,因为XHTML的真实MIME类型(application/html+xml)在Internet Explorer中无法使用。
目前没有浏览器关心这个空格。浏览器对这些事情非常宽容。
曾经需要使用这个空格来确保HTML解析器将尾随斜杠视为未识别的属性。

2
你能更具体地说明“曾经是”吗?年份和/或浏览器版本即可,谢谢! - Greg Mattes
5
我认为http://www.w3.org/TR/xhtml1/#C_2是此回答更精确的链接。因此,XHTML 1.0附录C2似乎已经过时,写空格纯粹是一种口味问题。 - Greg Mattes
4
实际上,真正的MIME类型是application/xhtml+xml。 - mk12
3
@JanAagaard说:“我不知道,如果是这样的话,我应该会记得 - 我在IE4和Netscape 4上开始了Web开发。你链接的答案也有一条评论表明了这一点,它说实际上是Netscape 3。” - Lee Kowalkowski
1
@LeeKowalkowski 实际上,附录C被标记为信息性的,因此是非规范性的。但这只是一个纯粹的外观问题。 - Édouard Lopez
显示剩余4条评论

39

Netscape 4.80 显示 HTML 中 <br/> 和 <br /> 的不同行为

附带Netscape 4.80浏览器截图支持bobince的回答,显示文档中的不同行为。

data:text/html,<title>space</title>foo<br />bar

(左上方,换行呈现) and

data:text/html,<title>no space</title>foo<br/>bar

(左下角,换行符被忽略)。


发布答案以展示图片

与此有关:事实上,我曾经提供了一个长长的答案,识别出古老浏览器这种不当行为的原因(并提出推荐包含空格的建议),即误解的 SGML 规范,即 SGML Null End Tag (NET)(其中 1<tag/2/3 等于 1<tag>2</tag>3,因此 1<tag/>2 实际上意味着 1<tag>>2),但我不仅找不到良好的证据和具体版本的标准,甚至无法掌握适当的规范兼容行为。 因此,以下是一些参考链接:

(现在无法重现,但支持 Lee Kowalkowski 的声明,即多个浏览器都受到此影响。)


27

这些问题仍然相关吗?或者我们是否仍在为了诸如IE3兼容性而添加额外的空格?

你接近了答案 —— 它是为了 Netscape 4。

看到其他的解释很有趣,但这就是它的本意。


2
谢谢!你能提供一个参考吗? - Greg Mattes
1
嗯,很难找到这么早的原始资料...官方的W3材料避免提及任何一个UA,并且列表中的讨论似乎将情况视为已知。可能还有其他需要空间的UA,但N4是最后一个让网站管理员困扰多年的。 - bobince
10年前,我编写代码时考虑了IE4和NS3的兼容性,这样你的XHTML文档也可以在Netscape上呈现。具体来说,这是为了break标签和image标签。 - Philihp Busby

5

不,空格并非必需,但对于一些老旧的浏览器来说,它是正确渲染这些标签所必需的。正确的做法是不要添加额外的空格,因为这是XHTML从XML继承而来的。


1
具体是哪些旧版浏览器?我想了解的是我们是否在谈论市场占有率较高的浏览器。 - Greg Mattes
我们不支持IE5及更早版本。 - jmucchiello

3
在XHTML中,br标签必须关闭,但空格不是必需的。这是一种样式上的事情。在HTML中,br标签不能关闭,因此两者都是错误的。

1
该文档的附录C指出应该有一个空格。 - 182764125216

2

这个空格只是为了让标签更易读。我非常支持为了编写更易读的代码而进行格式化。这些微小的改动可以带来很大的作用。如果没有空格,闭合标签和开放标签就会混在一起,当我快速阅读代码时,需要稍微花费一点时间才能处理它。


0

如果有一个非常懒惰的HTML编写者,或者他害怕引号,那该怎么办呢?如果你是他的机器人页面爬虫,考虑以下两种情况:

<img src=http://myunquotedurl.com/image.jpg />

<img src=http://myunquotedurl.com/image.jpg/>

这可能看起来微不足道,但如果没有空格,它会产生很大的影响。机器人无法确定斜杠是URL的一部分还是闭合标签的一部分。


20
好的,但是无论如何应该在网址周围加上引号。 - Florian Wendelborn

0

我认为空格是一种强化标签为空且自闭的方式。

今天我不再使用空格,因为我从未遇到过没有空格的问题。


1
“Reinforce”是“strong”的合适词语。 - Hao
感谢您的注意,很高兴在这里能看到有人确保写作的质量。 - nicruo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接