XHTML 中所有有效的自关闭元素(由主要浏览器实现)有哪些?
-
01-07-2019 - |
题
所有有效的自关闭元素是什么(例如<br/>)在XHTML中(由主要浏览器实现)?
我知道 XHTML 在技术上允许任何元素自关闭,但我正在寻找所有主要浏览器支持的这些元素的列表。看 http://dusan.fora.si/blog/self-ending-tags 有关由自闭合元素(例如 <div />)引起的一些问题的示例。
解决方案
每个支持 XHTML 的浏览器(Firefox、Opera、Safari、 IE9) 支持自关闭语法 每个元素.
<div/>
, <script/>
, <br></br>
一切都应该工作得很好。如果他们不这样做,那么你就有了 超文本标记语言 不恰当地添加了 XHTML DOCTYPE。
DOCTYPE 不会改变文档的解释方式。 只有 MIME 类型可以.
HTML WG 讨论了这个问题:目的是允许旧的(仅HTML)浏览器按照准则接受XHTML 1.0文档,并将其作为文本/HTML使用。因此,用作文本/HTML的文档应被视为HTML,而不是XHTML。
这是一个非常常见的陷阱,因为 W3C 验证器很大程度上忽略了该规则,但浏览器却严格遵循它。读 理解 HTML、XML 和 XHTML 来自 WebKit 博客:
事实上,互联网上绝大多数所谓的 XHTML 文档都被用作
text/html
. 。这意味着它们根本不是 XHTML,而是实际上无效的 HTML,依靠 HTML 解析器的错误处理来解决。所有这些“有效XHTML 1.0!”网络上的链接确实在说“无效的HTML 4.01!”。
要测试您是否具有真正的 XHTML 或具有 XHTML 的 DOCTYPE 的无效 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
. Content-Type
是国王。
根据记录,XHTML 规范允许任何元素通过使 XHTML 成为自闭合元素 XML应用:[强调我的]
空元素标签可用于 任何没有内容的元素, ,无论是否使用关键字 EMPTY 进行声明。
它也明确地显示在 XHTML规范:
空元素必须 任何一个 有结束标记或开始标记必须以
/>
. 。例如,<br/>
或者<hr></hr>
其他提示
关于这个主题需要非常小心的一个因素是 <script
> 元素。如果您有外部源文件,当您自行关闭它时会导致问题。尝试一下:
<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />
这在 Firefox 中可以工作,但至少在 IE6 中会出现问题。我知道,因为当我过度热心地自我关闭我看到的每个元素时遇到了这个;-)
自关闭语法适用于 application/xhtml+xml 中的所有元素。text/html 中的任何元素都不支持它,但是 HTML4 中为“空”的元素或 HTML5 中为“void”的元素无论如何都不会采用结束标记,因此如果您在这些元素上添加斜杠,它看起来就像支持自关闭语法。
来自 W3 学校参考网站:
<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
更好的问题是:哪些标签即使在 HTML 模式下也可以自动关闭而不影响代码?回答:仅那些内容为空的内容(无效)。根据 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>
?为什么他们不在该名单上?
根据经验,不要自动关闭任何打算包含内容的元素,因为它迟早肯定会导致浏览器问题。
那些自然会自我封闭的,比如 <br>
和 <img>
, ,应该是显而易见的。那些不是...只是不要自行关闭它们!
上次我检查时,以下是 HTML5 中列出的空/void 元素。
对作者有效:区域、基础、br、col、命令、嵌入、事件源、hr、img、输入、链接、元、参数、源
对作者无效:基本字体、bgsound、框架、间隔、wbr
除了 HTML5 中的一些新功能之外,您还应该了解在将 XHTML 作为文本/html 提供服务时可能支持的功能。(只需通过检查生成的 DOM 来测试它们即可。)
至于 XHTML 作为 application/xhtml+xml(这使其成为 XML),适用 XML 规则并且任何元素都可以为空(即使 XHTML DTD 无法表达这一点)。
你应该看看 xHTML DTD, ,都列出来了。以下是所有主要内容的快速回顾:
<br />
<hr />
<img />
<input />
它们在 HTML 5 中被称为“void”元素。他们列在 官方 W3 规格.
void 元素是其内容模型在任何情况下都不允许其具有内容的元素。
截至 2013 年 4 月,它们是:
区域、基础、br、col、命令、嵌入、hr、img、输入、注册机、链接、元、参数、源、轨道、wbr
截至 2018 年 12 月 (HTML 5.2),它们是:
区域、基础、br、col、嵌入、hr、img、输入、链接、元、参数、源、轨道、wbr
IE 的另一个自闭合标签问题是标题元素。当 IE(刚刚在 IE7 中尝试过)看到此内容时,它会向用户显示一个空白页面。然而,你“查看源代码”,一切都在那里。
<title/>
我最初是在我的 XSLT 生成自结束标记时看到这一点的。
我不会尝试对此进行详细说明,特别是因为我编写的大多数页面要么是生成的,要么标签确实有内容。在让它们自动关闭时,唯一给我带来麻烦的是:
<title/>
为此,我只是总是给它一个单独的结束标签,因为一旦它出现在 <head></head>
无论如何,它并不会让你的代码变得更加混乱。
<script/>
这是我最近遇到的一个大问题。多年来我一直使用自动关闭 <script/>
当脚本来自外部源时标记。但我最近开始收到有关空表单的 JavaScript 错误消息。经过几天的研究,我发现问题是(据说)浏览器永远无法访问 <form>
标签,因为它没有意识到这是结束 <script/>
标签。所以当我把它分成单独的 <script></script>
标签,一切正常。为什么我在同一个浏览器上制作的不同页面会有所不同,我不知道,但找到解决方案真是让人松了一口气!
<hr /> 是另一个