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

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

我知道XHTML技术上允许任何元素自封闭,但我正在寻找所有主stream浏览器支持的元素列表。 请参阅http://dusan.fora.si/blog/self-closing-tags,了解由诸如<div />之类的自closures元素引起的一些问题的示例。

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

<div/><script/><br></br>都应该可以正常工作。 如果他们不这样做,那么你有不正确地添加了XHTML DOCTYPE的HTML

DOCTYPE不会更改文档的解释方式。 只有MIMEtypes

W3C关于忽略DOCTYPE的决定 :

HTML工作组已经讨论过这个问题:目的是允许旧的(纯HTML)浏览器按照指导原则接受XHTML 1.0文档,并以text / html的forms提供。 因此,用作text / html的文档应该被视为HTML而不是XHTML。

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

事实上,互联网上绝大多数的XHTML文档都是以text/html 。 这意味着他们根本不是XHTML,而是HTMLerror handling的HTMLparsing器。 networking上的所有“有效的XHTML 1.0!”链接都是“无效的HTML 4.01!”。


要testing你是否有真正的XHTML或XHTML的DOCTYPE无效的HTML,把它放在你的文档中:

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

它validation,并在真正的XHTML它完美的作品(见: 1对2 )。 如果你不能相信你的眼睛(或不知道如何设置MIMEtypes),通过XHTML代理打开你的页面。

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

在HTML5 / XHTML5中,这并没有改变,区别甚至更清楚,因为你甚至没有额外的DOCTYPEContent-Type是国王。


为了logging,XHTML规范允许任何元素通过使XHTML成为XML应用程序来自我closures:[强调我的]

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

在XHTML规范中也明确地显示了这一点:

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

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

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

这将在Firefox中工作,但至less在IE6中打破。 我知道,因为我过分热心地自我closures了每一个元素,我遇到了这个问题;-)

自闭句法适用于application / xhtml + xml中的所有元素。 它不支持text / html中的任何元素,但HTML4中的“空”或HTML5中的“void”的元素无论如何都不会使用结束标记,因此如果您在这些元素上加上斜杠,自闭句法被支持。

从W3学校参考网站 :

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

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

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

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

basefont, bgsound, frame, isindex

希望这可以帮助某人:

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

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

快速经验法则,不要自行closures任何有内容的元素,因为这肯定会造成浏览器迟早的问题。

那些自然而然地自动closures的东西,比如<br><img> ,应该是显而易见的。 那些不是……只是不要自我closures!

最后一次检查,以下是HTML5中列出的空/空元素。

对作者有效:区域,基础,br,col,命令,embedded,事件源,hr,img,input,链接,元,参数,源

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

除了less数HTML5中的新function外,还应该给你提供一个当XHTML为text / html时可能受支持的概念。 (只需通过检查产生的DOM来testing它们。)

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

你应该看看xHTML DTD ,它们都被列出来了。 这里是一个快速审查所有主要的:

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

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

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

截至2013年4月,他们是:

地区,基地,br,col,命令,embedded,hr,img,input,keygen,链接,meta,param,源,跟踪,wbr

另一个自动closures标签的问题是标题元素。 当IE(只是在IE7中试过)看到这一点,它向用户呈现一个空白页面。 但是,你“查看源”,一切都在那里。

 <title/> 

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

我不打算在这方面进行过度的研究,尤其是因为我写的大部分页面都是生成的,或者标签确实有内容。 唯一让我自闭的两个人给了我麻烦:

<title/>

为此,我只是总是给它一个单独的结束标记,因为一旦它在<head></head>它并不会使你的代码更加混乱,无论如何。

<script/>

这是我最近碰到的最大的问题。 多年来,当脚本来自外部来源时,我总是使用自闭的<script/>标记。 但是我最近开始接受有关空表单的JavaScript错误信息。 经过几天的研究,我发现问题是(据说)浏览器从来没有进入<form>标签,因为它没有意识到这是<script/>标签的结尾。 所以,当我把它分成<script></script>标签时,一切正常。 为什么我在不同的页面上使用同一个浏览器,我不知道,但是find解决scheme是一个很大的安慰!

另一个是<hr />