XHTML(由主要浏览器实现)中所有有效的自动关闭元素是什么?


188

XHTML(由主要浏览器实现)中所有有效的自动关闭元素(例如<br/>)是什么?

我知道XHTML从技术上来说允许任何元素都是自封闭的,但是我正在寻找所有主要浏览器都支持的那些元素的列表。有关由自动关闭元素(例如<div />)引起的一些问题的示例,请参见http://dusan.fora.si/blog/self-closing-tags


7
这不是默认的XHTML用途之一吗?我认为XHTML的优点之一是可以使用XML生成器生成HTML。为什么任何XML生成器都会知道允许哪些标签是自动关闭的?太奇怪了
伊利亚

6
之所以接受“ lam”,“不正确”的答案,是因为它回答了假面显然在问的问题。他想知道当将XHTML用作text / html时哪些元素可以自动关闭而不会在浏览器中引起渲染问题。尽管在技术上不正确,但许多页面都是用XHTML编写的并用作text / html。通过澄清,可以解决这个问题,但是回答一个不同的问题(当您充当application / xml时会发生什么,或者text / html中的单个标记是否应该以/结束)在这种情况下没有帮助。
尼克·洛克伍德

Answers:


180

每个支持XHTML的浏览器(Firefox,Opera,Safari,IE9)在每个元素支持自动关闭语法。

<div/><script/><br></br>都应该只是罚款。如果没有,则您的HTML带有不适当添加的XHTML DOCTYPE。

DOCTYPE不会更改文档的解释方式。只有MIME类型

关于忽略DOCTYPE的W3C决定

HTML WG讨论了此问题:其目的是允许旧的(仅HTML)浏览器通过遵循准则并将其用作text / html来接受XHTML 1.0文档。因此,用作text / html的文档应被视为HTML而不是XHTML。

这是一个非常常见的陷阱,因为W3C验证程序在很大程度上忽略了该规则,但是浏览器却认真地遵循该规则。阅读 WebKit博客中的了解HTML,XML和XHTML

实际上,Internet上据称的绝大多数XHTML文档都用作text/html。这意味着它们根本不是XHTML,而是实际上由于HTML解析器的错误处理而变得无效的HTML。所有这些“有效的XHTML 1.0!” 网络上的链接实际上是在说“无效的HTML 4.01!”。


要测试您的XHTML的DOCTYPE是真实的XHTML还是无效的HTML,请将其放入文档中:

<span style="color:green"><span style="color:red"/> 
 If it's red, it's HTML. Green is XHTML.
</span>

它可以验证,并且在实际的XHTML中可以完美地工作(请参阅:1 vs 2)。如果您不敢相信自己的眼睛(或者不知道如何设置MIME类型),请通过XHTML proxy打开页面。

另一种检查方法是Firefox中的查看源代码。当斜杠无效时,它将以红色突出显示。

在HTML5 / XHTML5中,这一点没有改变,而且区别甚至更加明显,因为您甚至没有额外的DOCTYPEContent-Type是国王。


作为记录,XHTML规范通过将XHTML变成XML应用程序来允许任何元素自动闭合:[强调我的]

空元素标记可用于不包含内容的任何元素,无论是否使用关键字EMPTY进行声明。

XHTML规范中也明确显示了它:

空元素必须要么有结束标签或者开始标签必须结束/>。例如,<br/><hr></hr>


7
不正确的afaik,因为使用的自动关闭版本<script>或会<div>导致不同的呈现/解释。
ZeissS 2010年

13
@ZeissS 在中text/html。在实际的XHTML中,按原样发送application/xhtml+xml就可以了。请在降级投票之前阅读我链接到的文章(或XHTML规范附录C)。
Kornel

3
@pornel您可以确保自动关闭<script />标记在较旧的浏览器中可以使用吗?我不这么认为。您听起来很权威,并且您的大多数信息都是准确的,但是经验告诉我,自关闭脚本标签会出现问题,最好完全避免使用它们,而不是让自己头痛。
传记作者2011年

6
@Metagrapher如果较旧的浏览器不支持真正的XHTML,或者您无法设置MIME类型,则它将无法正常工作。但是,在具有application/xhtml+xmlMIME类型的支持XHTML的浏览器(此时为所有主要浏览器)中我可以保证<script/>能够使用。使用MIME类型。只要。
Kornel

4
@capdragon:较旧的浏览器不支持XHTML(用作“ application / xhtml + xml”)。如果您向他们发送XHTML文档为“ text / html”,则XHTML会呈现为标记汤(即浏览器将其解析为HTML,并考虑自动关闭标记错误,可以从中自动恢复错误)。您的选择是1.编写HTML 4(如果使用呈现XHTML的ASP.NET,则不是完全正确的选择),2.将XHTML用作“ application / xhtml + xml”(需要IE9 +,并且此MIME类型将在所有浏览器中破坏脚本无论如何,所以def不是一个选择),3.编写HTML 5,这基本上使标记汤成为标准:)
Triynko 2011年

41

在此主题上要特别小心的一个元素是<script>元素。如果您有一个外部源文件,则在您自行关闭它时将引起问题。试试吧:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

这将在Firefox中运行,但至少会在IE6中中断。我知道,因为当我过度关闭自己看到的每个元素时,我都会遇到这个问题;-)



4
<SCRIPT>没有自己关闭在Firefox 3
hsivonen

好吧,当我遇到它时,它曾经可以在Firefox中运行。似乎它不再适用于任何浏览器。也许也只能在怪癖模式下工作吗?
Erik van Brakel

1
@erickson它工作在Firefox罚款,如果会得到你的MIME类型的权利。
Kornel 2010年

WebKit出于兼容性原因而继续这样做。
于洪宝

35

自关闭语法适用于application / xhtml + xml中的所有元素。text / html中的任何元素均不支持此标记,但是HTML4中的“空”元素或HTML5中的“空”元素无论如何都不会带有结束标记,因此,如果在这些元素上加斜杠,它看起来就好像支持自动关闭语法。


33

W3 Schools参考站点

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />

7
w3schools.com/tags/default.asp我看到12个以结尾的标签/>"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
mpen

94
请注意,W3schools不隶属于W3C,甚至无法响应W3C成员发送的更正。
Kornel

2
通常,w3schools是正确的。查找空元素的一种准确方法是运行grep EMPTY xhtml1-strict.dtd | sortgrep EMPTY xhtml1-transitional.dtd | sort
cayhorstmann 2013年

1
恕我直言,人们抨击W3Schools的方式太辛苦了。当您开始不了解某个主题时,事实证明它本身就是一个不错的资源。
Priidu Neemre

28

更好的问题是:即使在HTML模式下,哪些标签也可以自动关闭而不影响代码?答:只有那些内容为空的(无效)。根据HTML规范,以下元素是无效的:

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

较旧版本的规范也已列出command。此外,根据各种消息来源,以下陈旧或非标准的标签是无效的:

basefont, bgsound, frame, isindex


10

希望这对某人有帮助:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />

5

怎么样<meta><link>?他们为什么不在名单上?

快速的经验法则,请勿自行关闭旨在包含内容的任何元素,因为它肯定会迟早引起浏览器问题。

自然关闭的对象(例如<br><img>)应该很明显。那些不是...只是不要自行关闭它们!


4

我上次检查时,以下是HTML5中列出的empty / void元素。

对作者有效:area,base,br,col,command,embed,eventsource,hr,img,input,link,meta,param,source

对作者无效:basefont,bgsound,frame,spacer,wbr

除了HTML5中的一些新功能外,还应该使您了解将XHTML作为text / html服务时可能支持的功能。(只需通过检查生成的DOM对其进行测试。)

至于将XHTML用作application / xhtml + xml(使其成为XML),则将应用XML规则,并且任何元素都可以为空(即使XHTML DTD无法表达这一点)。


4

您应该看一下xHTML DTD,它们都已列出。快速浏览一下所有主要内容:

<br />
<hr />
<img />
<input />

1
修复并清理了标记。仔细浏览此页面中的链接,它们加载缓慢。
e-satis

4

它们在HTML 5中被称为“ void”元素。它们在W3官方规范中列出。

void元素是其内容模型在任何情况下都不允许其内容的元素。

截至2013年4月,他们是:

区域,基本,br,col,命令,嵌入,hr,img,输入,keygen,链接,meta,param,源,跟踪,wbr

截至2018年12月(HTML 5.2),它们是:

区域,基本,br,col,嵌入,hr,img,输入,链接,元,参数,源,跟踪,wbr


2

IE的另一个自动关闭标签问题是title元素。当IE(在IE7中刚刚尝试过)看到此消息时,它将向用户显示空白页。但是,您“查看源代码”,一切都在那里。

<title/>

我最初在XSLT生成自我关闭标记时看到了这一点。


铬也不喜欢<title/>标签。
uınbɐɥs

2

我不会尝试对此进行详细说明,尤其是因为我编写的大多数页面都是生成的,或者标签确实包含内容。使它们自动关闭时给我带来麻烦的仅有的两个是:

<title/>

为此,我只是诉诸于总是给它一个单独的结束标记,因为一旦它放在其中,<head></head>它实际上并不会使您的代码变得更混乱。

<script/>

这是我最近遇到的大问题。多年以来,<script/>当脚本来自外部资源时,我一直使用自动关闭标签。但是我最近开始收到有关空格式的JavaScript错误消息。经过几天的研究,我发现问题是(据说)浏览器从未到达<form>标签,因为它没有意识到这是<script/>标签的结尾。因此,当我将其放入单独的<script></script>标签中时,一切正常。我不知道为什么在同一浏览器中创建的不同页面中会有差异,但是找到解决方案真是一件大事!


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.