XHTML中的所有有效自闭元素(例如< br />)是什么(由主要浏览器实现)?
我知道XHTML在技术上允许任何元素自我关闭,但我正在寻找所有主要浏览器支持的元素列表。有关自闭元素(例如< div />)引起的某些问题的示例,请参阅http://dusan.fora.si/blog/self-closing-tags。
答案 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中,这一点没有改变,而且区别更加清晰,因为你甚至没有额外的DOCTYPE
。 Content-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)
<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;是另一个