194

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

我知道 XHTML 在技术上允许任何元素自关闭,但我正在寻找所有主要浏览器支持的那些元素的列表。见http://dusan.fora.si/blog/self-closing-tags以了解由 <div /> 等自闭合元素引起的一些问题的示例。

4

13 回答 13

185

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

<div/>, <script/>,<br></br>一切都应该正常工作。如果没有,那么您的HTML中添加了不恰当的 XHTML DOCTYPE。

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

W3C 关于忽略 DOCTYPE 的决定

HTML WG 讨论了这个问题:其目的是允许旧的(仅 HTML)浏览器按照指南接受 XHTML 1.0 文档,并将它们作为 text/html 提供。因此,作为 text/html 的文档应该被视为 HTML 而不是 XHTML。

这是一个非常常见的陷阱,因为 W3C Validator 在很大程度上忽略了该规则,但浏览器却虔诚地遵循它。从 WebKit 博客中阅读 理解 HTML、XML 和 XHTML :

事实上,互联网上绝大多数所谓的 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 代理打开您的页面。

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

在 HTML5/XHTML5 中,这并没有改变,而且区别更加清晰,因为你甚至没有额外DOCTYPE的 . Content-Type是国王。


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

空元素标签可用于任何没有内容的元素,无论它是否使用关键字 EMPTY 声明。

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

空元素必须一个结束标签或开始标签必须以/>. 例如,<br/><hr></hr>

于 2008-10-15T20:48:52.000 回答
42

在这个主题上要非常小心的一个元素是<script> 元素。如果你有一个外部源文件,当你自己关闭它时会引起问题。尝试一下:

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

这将在 Firefox 中工作,但至少在 IE6 中会中断。我知道,因为当我过分热心地自我关闭我看到的每个元素时,我遇到了这个问题 ;-)

于 2008-09-26T23:14:18.023 回答
36

自闭合语法适用于 application/xhtml+xml 中的所有元素。text/html 中的任何元素都不支持它,但是 HTML4 中的“空”或 HTML5 中的“void”元素无论如何都不会使用结束标记,所以如果你在它们上加上斜线,它看起来好像支持自关闭语法。

于 2008-11-12T08:14:36.773 回答
34

来自W3 Schools 参考网站

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
于 2008-09-18T22:17:39.867 回答
32

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

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

旧版本的规范也列出来了command。此外,根据各种来源,以下过时或非标准标签是无效的:

basefont, bgsound, frame, isindex

于 2012-01-13T16:09:54.907 回答
11

希望这可以帮助某人:

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

<area />
<br />
<col />
<hr />
<img />
<input />
<param />
于 2009-11-14T22:01:24.873 回答
6

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

快速的经验法则,不要自行关闭任何打算包含内容的元素,因为它迟早会导致浏览器问题。

自然自闭的,如<br><img>,应该是显而易见的。那些不是......只是不要自行关闭它们!

于 2008-09-26T23:10:18.140 回答
5

您应该看一下xHTML DTDs,它们都已列出。以下是所有主要内容的快速回顾:

<br />
<hr />
<img />
<input />
于 2008-09-18T22:16:18.107 回答
5

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

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

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

除了 HTML5 中的一些新内容之外,这应该让您了解在将 XHTML 作为 text/html 服务时可能支持的内容。(只需通过检查生成的 DOM 来测试它们。)

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

于 2008-11-12T09:23:44.577 回答
5

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

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

截至 2013 年 4 月,它们是:

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

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

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

于 2013-04-22T20:08:59.480 回答
2

IE 的另一个自闭标签问题是标题元素。当 IE(刚刚在 IE7 中尝试过)看到这一点时,它会向用户显示一个空白页面。但是,您“查看源代码”并且一切都在那里。

<title/>

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

于 2008-10-12T23:04:16.847 回答
2

我不会试图对此进行过度阐述,特别是因为我编写的大多数页面要么是生成的,要么标签确实有内容。在使它们自动关闭时,唯一给我带来麻烦的两个是:

<title/>

为此,我只是简单地总是给它一个单独的结束标签,因为一旦它出现在<head></head>它上面,它并不会真正让你的代码变得更混乱。

<script/>

这是我最近遇到的大问题。多年来,<script/>当脚本来自外部来源时,我总是使用自闭合标签。但我最近开始收到关于 null 表单的 JavaScript 错误消息。经过几天的研究,我发现问题是(据说)浏览器从未访问过<form>标签,因为它没有意识到这是<script/>标签的结尾。所以当我把它做成单独的<script></script>标签时,一切正常。为什么我在同一个浏览器上创建的不同页面会有所不同,我不知道,但找到解决方案让我松了一口气!

于 2010-08-27T04:16:20.747 回答
-3

<hr /> 是另一个

于 2008-09-18T22:13:13.327 回答