XHTML(由主要浏览器实现)中所有有效的自动关闭元素(例如<br/>)是什么?
我知道XHTML从技术上来说允许任何元素都是自封闭的,但是我正在寻找所有主要浏览器都支持的那些元素的列表。有关由自动关闭元素(例如<div />)引起的一些问题的示例,请参见http://dusan.fora.si/blog/self-closing-tags。
XHTML(由主要浏览器实现)中所有有效的自动关闭元素(例如<br/>)是什么?
我知道XHTML从技术上来说允许任何元素都是自封闭的,但是我正在寻找所有主要浏览器都支持的那些元素的列表。有关由自动关闭元素(例如<div />)引起的一些问题的示例,请参见http://dusan.fora.si/blog/self-closing-tags。
Answers:
每个支持XHTML的浏览器(Firefox,Opera,Safari,IE9)在每个元素上都支持自动关闭语法。
<div/>
,<script/>
,<br></br>
都应该只是罚款。如果没有,则您的HTML带有不适当添加的XHTML DOCTYPE。
DOCTYPE不会更改文档的解释方式。只有MIME类型。
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中,这一点没有改变,而且区别甚至更加明显,因为您甚至没有额外的DOCTYPE
。Content-Type
是国王。
作为记录,XHTML规范通过将XHTML变成XML应用程序来允许任何元素自动闭合:[强调我的]
空元素标记可用于不包含内容的任何元素,无论是否使用关键字EMPTY进行声明。
XHTML规范中也明确显示了它:
空元素必须要么有结束标签或者开始标签必须结束
/>
。例如,<br/>
或<hr></hr>
<script>
或会<div>
导致不同的呈现/解释。
text/html
。在实际的XHTML中,按原样发送application/xhtml+xml
就可以了。请在降级投票之前阅读我链接到的文章(或XHTML规范附录C)。
application/xhtml+xml
MIME类型的支持XHTML的浏览器(此时为所有主要浏览器)中,我可以保证<script/>
能够使用。使用MIME类型。只要。
在此主题上要特别小心的一个元素是<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"
grep EMPTY xhtml1-strict.dtd | sort
或grep EMPTY xhtml1-transitional.dtd | sort
更好的问题是:即使在HTML模式下,哪些标签也可以自动关闭而不影响代码?答:只有那些内容为空的(无效)。根据HTML规范,以下元素是无效的:
area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr
较旧版本的规范也已列出command
。此外,根据各种消息来源,以下陈旧或非标准的标签是无效的:
basefont, bgsound, frame, isindex
我上次检查时,以下是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无法表达这一点)。
我不会尝试对此进行详细说明,尤其是因为我编写的大多数页面都是生成的,或者标签确实包含内容。使它们自动关闭时给我带来麻烦的仅有的两个是:
<title/>
为此,我只是诉诸于总是给它一个单独的结束标记,因为一旦它放在其中,<head></head>
它实际上并不会使您的代码变得更混乱。
<script/>
这是我最近遇到的大问题。多年以来,<script/>
当脚本来自外部资源时,我一直使用自动关闭标签。但是我最近开始收到有关空格式的JavaScript错误消息。经过几天的研究,我发现问题是(据说)浏览器从未到达<form>
标签,因为它没有意识到这是<script/>
标签的结尾。因此,当我将其放入单独的<script></script>
标签中时,一切正常。我不知道为什么在同一浏览器中创建的不同页面中会有差异,但是找到解决方案真是一件大事!
<hr />是另一个