所有主流浏览器都支持哪些有效的自闭合元素(例如<br/>),在XHTML中哪些是可以使用的?
我知道XHTML技术上允许任何元素都可以自闭合,但我正在寻找由所有主流浏览器支持的自闭合元素列表。请参见http://dusan.fora.si/blog/self-closing-tags,其中有一些由于使用自闭合元素(如<div />)而导致问题的示例。
所有主流浏览器都支持哪些有效的自闭合元素(例如<br/>),在XHTML中哪些是可以使用的?
我知道XHTML技术上允许任何元素都可以自闭合,但我正在寻找由所有主流浏览器支持的自闭合元素列表。请参见http://dusan.fora.si/blog/self-closing-tags,其中有一些由于使用自闭合元素(如<div />)而导致问题的示例。
每个支持XHTML的浏览器(Firefox,Opera,Safari,IE9)都支持在每个元素上使用自闭语法。
<div/>
, <script/>
, <br></br>
都应该正常工作。如果不行,那么您使用的是不适当添加XHTML DOCTYPE的HTML。
DOCTYPE不会改变文档的解释方式。只有MIME类型才能改变。
HTML WG已经讨论过这个问题:意图是通过遵循指南并将它们作为text/html呈现,允许旧的(仅限HTML)浏览器接受XHTML 1.0文档。因此,作为text/html的文档应该被视为HTML而不是XHTML。
这是一个非常普遍的陷阱,因为W3C验证器在很大程度上忽略了这个规则,但浏览器都遵循它。请阅读 WebKit 博客中的理解 HTML、XML 和 XHTML:
事实上,互联网上绝大多数所谓的XHTML文档都是以
text/html
格式提供的。这意味着它们根本不是XHTML,而实际上是通过HTML解析器的错误处理获得通过的无效HTML。所有那些“有效的XHTML 1.0!”的链接实际上都是在说“无效的HTML 4.01!”。
要测试您是否使用真正的XHTML或带有XHTML DOCTYPE的无效HTML,请将以下内容放入您的文档中:
<span style="color:green"><span style="color:red"/>
If it's red, it's HTML. Green is XHTML.
</span>
它是有效的,并且在真正的XHTML中它可以完美运作(请参见:1与2)。如果您无法相信自己的眼睛(或不知道如何设置MIME类型),请通过XHTML代理打开您的页面。
另一种检查方法是在Firefox中查看源代码。当斜杠无效时,它将以红色突出显示。
在HTML5 / XHTML5中,这没有改变,而且区别更加明显,因为您甚至没有其他DOCTYPE
。 Content-Type
才是最重要的。
值得注意的是,XHTML规范允许通过将XHTML作为XML应用程序来关闭任何元素的自我封闭:[强调是我的]
空元素标记可用于任何没有内容的元素,无论是否使用关键字EMPTY进行声明。
这也明确说明在XHTML规范中:
空元素必须具有结束标记,或者起始标记必须以
/>
结尾。例如,<br/>
或<hr></hr>
<script>
或<div>
会导致不同的呈现/解释。 - ZeissStext/html
中才会出现问题。在作为 application/xhtml+xml
发送的真正的 XHTML 中,它可以正常工作。在投票之前,请先阅读我链接的文章(或 XHTML 规范的附录 C)。 - Kornelapplication/xhtml+xml
MIME类型时,我才能保证<script/>
将起作用。仅限于MIME类型。 - Kornel在这个话题上需要格外小心的一个元素是 <script
> 元素。如果你有一个外部源代码文件,在自我关闭时它会导致问题。试一下:
<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />
这在Firefox中能够正常工作,但在至少IE6中会出现问题。我知道,因为当我过于热衷于自我封闭每个元素时,遇到了这个问题。
<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
/>
结尾的标签:"area"、"base"、"basefont"、"br"、"col"、"frame"、"hr"、"img"、"input"、"link"、"meta"和"param"。 - mpengrep EMPTY xhtml1-strict.dtd | sort
或grep EMPTY xhtml1-transitional.dtd | sort
。 - cayhorstmanncommand
。此外,根据各种来源,以下已过时或非标准标记也是 void:basefont, bgsound, frame, isindex
。希望这能帮助到某个人:
<base />
<basefont />
<frame />
<link />
<meta />
<area />
<br />
<col />
<hr />
<img />
<input />
<param />
截至2013年4月,它们是:空元素是指其内容模型在任何情况下都不允许其具有内容的元素。
截至2018年12月(HTML 5.2版本),它们是:area、base、br、col、command、embed、hr、img、input、keygen、link、meta、param、source、track、wbr
area、base、br、col、embed、hr、img、input、link、meta、param、source、track、wbr
那么 <meta>
和 <link>
呢?为什么它们不在这个列表中?
一个快速的经验法则是,不要自闭任何预期有内容的元素,因为它肯定会在早晚间导致浏览器问题。
那些天然自闭的元素,像 <br>
和 <img>
,应该是很明显的。那些不是...就不要自闭它们!
您应该查看xHTML DTDs,它们都列在那里。以下是所有主要DTD的快速概述:
<br />
<hr />
<img />
<input />