所有有效的自关闭元素是什么(例如<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 类型可以.

W3C 关于忽略 DOCTYPE 的决定:

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 中它可以完美地工作(请参阅: 12)。如果您不敢相信自己的眼睛(或者不知道如何设置 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 /> 是另一个

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top