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

时间:2008-09-18 22:10:44

标签: html xhtml browser cross-browser

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

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

13 个答案:

答案 0 :(得分:178)

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

<div/><script/><br></br>一切都应该正常工作。如果他们不这样做,那么你有 HTML 与不恰当添加的XHTML DOCTYPE。

DOCTYPE不会更改文档的解释方式。 Only MIME type does

W3C decision about ignoring DOCTYPE

  

HTML工作组讨论了这个问题:意图是允许旧的   (仅限HTML)浏览器通过以下方式接受XHTML 1.0文档   准则,并将其作为text / html提供。因此,文件作为   text / html应该被视为HTML而不是XHTML。

这是一个非常常见的陷阱,因为W3C Validator在很大程度上忽略了这个规则,但是浏览器在宗教上遵循它。读  来自WebKit博客的Understanding HTML, XML and 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 proxy打开您的页面。

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

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


为了记录,XHTML规范允许任何元素通过使XHTML成为XML application来自我关闭:[强调我的]

  

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

它也明确地显示在XHTML spec

  

空元素必须 具有结束标记,或者开始标记必须以/>结尾。例如,<br/><hr></hr>

答案 1 :(得分:40)

关于这个主题要非常小心的一个要素是<script&gt;元件。如果您有外部源文件,则在自行关闭时会导致问题。试试吧:

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

这可以在Firefox中使用,但至少在IE6中有效。我知道,因为当我过度热心地关闭我看到的每一个元素时,我遇到了这个问题; - )

答案 2 :(得分:35)

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

答案 3 :(得分:34)

来自W3 Schools reference site

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

答案 4 :(得分:28)

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

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

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

basefont, bgsound, frame, isindex

答案 5 :(得分:10)

希望这有助于某人:

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

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

答案 6 :(得分:5)

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

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

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

答案 7 :(得分:4)

您应该查看xHTML DTDs,它们全部列出。以下是对所有主要内容的快速回顾:

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

答案 8 :(得分:4)

我最后一次检查时,以下是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(使其成为XML)的XHTML,XML规则适用,并且任何元素都可以为空(即使XHTML DTD无法表达这一点)。

答案 9 :(得分:4)

它们在HTML 5中被称为“void”元素。它们列在official W3 spec中。

  

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

截至2013年4月,它们是:

  

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

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

  

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

答案 10 :(得分:2)

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

<title/>

当我的XSLT生成自闭标记时,我最初看到了这个。

答案 11 :(得分:2)

我不会试图详细说明这一点,特别是因为我写的大部分页面都是生成的,或者标签确实有内容。只有两个在让它们自我关闭时给我带来麻烦的是:

<title/>

为此,我只是总是给它一个单独的结束标记,因为一旦它出现在<head></head>中,它就不会让你的代码变得更加混乱。

<script/>

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

答案 12 :(得分:-2)

&lt; hr /&gt;是另一个