XHTML中的所有有效自闭元素(由主流浏览器实现)是什么?

kam*_*ens 183 html browser xhtml cross-browser

XHTML中的所有有效自闭元素(例如<br/>)是什么(由主要浏览器实现)?

我知道XHTML在技术上允许任何元素自我关闭,但我正在寻找所有主要浏览器支持的那些元素的列表.有关由自关闭元素(如<div />)引起的某些问题的示例,请参见http://dusan.fora.si/blog/self-closing-tags.

Kor*_*nel 180

每个支持XHTML的浏览器(Firefox,Opera,Safari,IE9)都支持每个元素的自动关闭语法.

<div/>,<script/>,<br></br>都应该只是罚款.如果他们不这样做,那么你的HTML会添加不恰当的XHTML DOCTYPE.

DOCTYPE不会更改文档的解释方式.只有MIME类型.

W3C关于忽略DOCTYPE的决定:

HTML WG讨论了这个问题:目的是允许旧的(仅限HTML)浏览器遵循指南接受XHTML 1.0文档,并将它们作为text/html提供.因此,用作text/html的文档应该被视为HTML而不是XHTML.

这是一个非常常见的陷阱,因为W3C Validator在很大程度上忽略了这个规则,但是浏览器在宗教上遵循它.阅读 从WebKit博客了解HTML,XML和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>
Run Code Online (Sandbox Code Playgroud)

它验证,并且在真正的XHTML中它完美地工作(参见:1 vs 2).如果您无法相信自己的眼睛(或者不知道如何设置MIME类型),请通过XHTML代理打开您的页面.

另一种检查方法是在Firefox中查看源代码.当它们无效时,它会突出显示红色的斜线.

在HTML5/XHTML5中,这没有改变,并且区别更加清晰,因为你甚至没有额外的DOCTYPE.Content-Type是国王.


为了记录,XHTML规范允许任何元素通过使XHTML成为XML应用程序来自动关闭:[强调我的]

空元素标签可以用于任何没有内容的元素,无论是否使用关键字EMPTY声明它.

它也在XHTML规范中明确显示:

空元素必须要么有结束标签或者开始标签必须结束/>.例如,<br/><hr></hr>

  • @ZeissS*仅*在`text/html`中.在真正的XHTML中,作为`application/xhtml + xml`发送,它的工作正常.请在下载前阅读我链接到的文章(或XHTML规范附录C). (13认同)
  • 不正确afaik,因为使用自我关闭版本的`<script>`或`<div>`导致不同的渲染/解释. (7认同)
  • @Metagrapher如果旧浏览器不支持真正的XHTML,*或者你没有设置MIME类型*,那么它将无法工作.但是,在支持XHTML的浏览器(此时所有主要的浏览器)**中使用`application/xhtml + xml` MIME类型**我可以保证`<script />`可以正常工作.使用MIME类型.只要. (6认同)
  • @capdragon:较旧的浏览器不支持XHTML(作为'application/xhtml + xml').如果您将XHTML文档作为'text/html'发送给它们,那么XHTML将呈现为标记汤(即浏览器将其解析为HTML并考虑自动关闭标记错误,它会从中优雅地恢复).您的选项是1.编写HTML 4(如果使用呈现XHTML的ASP.NET,则不完全是一个选项),2.将您的XHTML作为'application/xhtml + xml'提供(需要IE9 +,并且此MIME类型将破坏所有浏览器中的脚本无论如何,所以def不是一个选项),3.写HTML 5,这基本上使标签汤成为标准:) (4认同)
  • @pornel你可以保证自我关闭<script />标签可以在旧浏览器中使用吗?我不这么认为.你听起来权威,而且你的大部分信息都是准确的,但经验告诉我,自我关闭脚本标签会有问题,最好完全避免它们,而不是让自己头疼. (3认同)
  • 重申一下...... XHTML应该作为'application/xhtml + xml'提供,但它在包括IE9在内的所有现代浏览器中都完全被破坏了,因为像'document.write'和'document.cookie'这样的成员不存在而且很多即使页面呈现正常,脚本也会中断.因此,您最好坚持使用"text/html"MIME类型提供内容,并且最好坚持HTML 5指南,因为HTML 5标准旨在涵盖标签汤(HTML和XHTML的某些混合)一个定义明确的庄园(由XHTML2 WG与HTML5合并证明). (2认同)
  • @SlippDouglas这是正确的,请仔细阅读为什么*`DOCTYPE`无关紧要*.当您正确使用XHTML/HTML5 + XML**时,它会在所有浏览器中自行关闭**. (2认同)
  • 这绝对令人着迷 - 真正令人惊奇的是w3c主页在标题中声明了一个xhtml doctype但text/html mime类型.根据你所说的,我猜这是非常不正确的. (2认同)

Eri*_*kel 40

关于这个主题要非常小心的一个要素是<script>元素.如果您有外部源文件,则在自行关闭时会导致问题.试试吧:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />
Run Code Online (Sandbox Code Playgroud)

这可以在Firefox中使用,但至少在IE6中有效.我知道,因为当我过度热心地关闭我看到的每一个元素时,我遇到了这个问题;-)

  • Firefox 3中的<script>不会自动关闭. (4认同)

hsi*_*nen 35

自闭语法适用于application/xhtml + xml中的所有元素.text/html中的任何元素都不支持它,但HTML4中"空"或HTML5中"void"的元素无论如何都不会使用结束标记,所以如果你在它们上面放一个斜杠,它就像是支持自关闭语法.


Con*_*oyP 34

来自W3学校参考站点:

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />
Run Code Online (Sandbox Code Playgroud)

  • 请注意,W3schools与W3C没有关联,甚至没有回应W3C成员发送的更正. (92认同)
  • http://www.w3schools.com/tags/default.asp我看到12个标签以`/>`:`"area","base","basefont","br","col","frame"结尾,"hr","img","input","link","meta","param"` (7认同)
  • 通常,w3schools几乎是正确的.找到空元素的一种准确方法是运行`grep EMPTY xhtml1-strict.dtd | sort`或`grep EMPTY xhtml1-transitional.dtd | sort` (2认同)
  • 恕我直言,人们抨击 W3Schools 太难了。事实证明,当您开始(!)一个您一无所知的主题时,它本身是一个很好的资源。 (2认同)

Dmi*_*kiy 28

更好的问题是:哪些标签即使在HTML模式下也可以自动关闭而不会影响代码?答案:只有那些内容空洞的内容(无效).根据HTML规范,以下元素无效:

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

旧版规范也列出了command.此外,根据各种来源,以下过时或非标准标签无效:

basefont, bgsound, frame, isindex


Jef*_*eff 10

希望这有助于某人:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />
Run Code Online (Sandbox Code Playgroud)


mpe*_*pen 7

它们在 HTML 5 中被称为“void”元素。它们列在官方 W3 规范中。

void 元素是其内容模型在任何情况下都不允许其具有内容的元素。

截至 2013 年 4 月,它们是:

区域、基础、br、col、命令、嵌入、hr、img、输入、注册机、链接、元、参数、源、轨道、wbr

截至 2018 年 12 月 (HTML 5.2),它们是:

区域、基础、br、col、嵌入、hr、img、输入、链接、元、参数、源、轨道、wbr


e-s*_*tis 6

您应该查看xHTML DTD,它们都已列出。以下是所有主要内容的快速回顾:

<br />
<hr />
<img />
<input />
Run Code Online (Sandbox Code Playgroud)


Sha*_*531 6

上次我检查时,以下是 HTML5 中列出的空/void 元素。

对作者有效:area、base、br、col、command、embed、eventsource、hr、img、input、link、meta、param、source

对作者无效:basefont、bgsound、frame、spacer、wbr

除了 HTML5 中的一些新功能之外,您还应该了解在将 XHTML 作为文本/html 提供服务时可能支持的功能。(只需通过检查生成的 DOM 来测试它们即可。)

至于 XHTML 作为 application/xhtml+xml(这使其成为 XML),适用 XML 规则并且任何元素都可以为空(即使 XHTML DTD 无法表达这一点)。


Amb*_*pel 5

怎么样<meta><link>?他们为什么不在名单上?

快速经验法则,不要自行关闭任何有内容的元素,因为它肯定会迟早引起浏览器问题.

这自然是自闭,喜欢的.<br><img>,应该是显而易见的.那些不是......只是不要自我关闭!