XHTML(由主要浏览器实现)中所有有效的自动关闭元素是什么?
XHTML(由主要浏览器实现)中所有有效的自动关闭元素(例如<br/>)是什么?
我知道XHTML从技术上讲允许任何元素都是自动关闭的,但是我正在寻找所有主要浏览器都支持的那些元素的列表。有关由自动关闭元素(例如<div />)引起的一些问题的示例,请参见http://dusan.fora.si/blog/self-closing-tags。
解决方案
<hr />是另一个
我们应该看一下xHTML DTD,它们都已列出。快速浏览一下所有主要内容:
<br /> <hr /> <img /> <input />
从W3 Schools参考站点:
<area /> <base /> <basefont /> <br /> <hr /> <input /> <img /> <link /> <meta />
那<meta>和<link>
呢?他们为什么不在名单上?
快速的经验法则,请勿自行关闭旨在包含内容的任何元素,因为它肯定会迟早引起浏览器问题。
那些自然会自动关闭的东西,例如<br>
和<img>
应该很明显。那些不是...只是不要自行关闭它们!
在这个主题上要特别小心的一个元素是<script>元素。如果我们有一个外部源文件,则在我们自行关闭它时将引起问题。试试吧:
<!-- this will not consistently work in all browsers! --> <script type="text/javascript" src="external.js" />
这将在Firefox中运行,但至少会在IE6中中断。我知道,因为当我过度关闭自己看到的每一个元素时,我都会遇到这个问题;-)
IE的另一个自动关闭标签问题是title元素。当IE(在IE7中刚刚尝试过)看到此消息时,它将向用户显示空白页。但是,我们"查看源代码",一切都在那里。
<title/>
我最初在XSLT生成自我关闭标签时看到了这一点。
每个支持XHTML的浏览器(Firefox,Opera,Safari,IE9)在每个元素上都支持自动关闭语法。
<div />
,<script />
,<br> </br>
应该都可以正常工作。如果不是,则HTML中添加了不适当的XHTML DOCTYPE。
DOCTYPE不会更改文档的解释方式。仅MIME类型。
关于忽略DOCTYPE的W3C决定:
The HTML WG has discussed this issue: the intention was to allow old (HTML-only) browsers to accept XHTML 1.0 documents by following the guidelines, and serving them as text/html. Therefore, documents served as text/html should be treated as HTML and not as XHTML.
这是一个非常常见的陷阱,因为W3C验证程序在很大程度上忽略了该规则,但是浏览器却认真地遵循该规则。读
从WebKit博客了解HTML,XML和XHTML:
In fact, the vast majority of supposedly XHTML documents on the internet are served as text/html. Which means they are not XHTML at all, but actually invalid HTML that’s getting by on the error handling of HTML parsers. All those “Valid XHTML 1.0!” links on the web are really saying “Invalid 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对2)。如果我们不敢相信自己的眼睛(或者不知道如何设置MIME类型),请通过XHTML代理打开页面。
另一种检查方法是Firefox中的查看源代码。当斜杠无效时,它将以红色突出显示。
在HTML5 / XHTML5中,这没有改变,而且区别甚至更加明显,因为我们甚至没有其他的DOCTYPE。 "内容类型"为王。
作为记录,XHTML规范通过将XHTML变成XML应用程序来允许任何元素自动闭合:[强调我的]
Empty-element tags may be used for any element which has no content, whether or not it is declared using the keyword EMPTY.
XHTML规范中也明确显示了它:
Empty elements must either have an end tag or the start tag must end with />. For instance, <br/> or <hr></hr>
自关闭语法适用于application / xhtml + xml中的所有元素。 text / html中的任何元素均不支持它,但是HTML4中为空或者HTML5中为void的元素无论如何都不会带有结束标记,因此,如果在这些元素上加上斜杠,就好像支持自动关闭语法。
我上次检查时,以下是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无法表达这一点)。
希望这对某人有帮助:
<base /> <basefont /> <frame /> <link /> <meta /> <area /> <br /> <col /> <hr /> <img /> <input /> <param />
我不会尝试对此进行详细说明,特别是因为我编写的大多数页面都是生成的,或者标记确实包含内容。使它们自动关闭时给我带来麻烦的仅有的两个是:
<title />
为此,我只是诉诸于总是给它一个单独的结束标记,因为一旦它放在<head> </ head>
中,它实际上并不会使代码变得更麻烦。
<script />
这是我最近遇到的大问题。多年以来,当脚本来自外部资源时,我一直使用自封闭的<script />标签。但是我最近开始收到有关空格式的JavaScript错误消息。经过几天的研究,我发现问题是(据说)浏览器从未到达<form>
标签,因为它没有意识到这就是<script />
标签的结尾。因此,当我将其放入单独的<script> </ script>
标签时,一切正常。我不知道为什么在同一浏览器上的不同页面中会有所不同,但是找到解决方案真是一件大事!