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

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

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

96009 次浏览

< hr/> 是另一个

你应该看看 XHTML DTD,它们都列出来了。这里是一个快速回顾所有主要的:

<br />
<hr />
<img />
<input />

来自 W3学校参考网站:

<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 生成 self 关闭标记时看到这一点的。

每个支持 XHTML 的浏览器(Firefox、 Opera、 Safari、 IE9)都支持 所有元素上的自闭语法。

<div/><script/><br></br>都可以正常工作。如果它们不能正常工作,那么你就有 超文本标示语言和不适当添加的 XHTMLDOCTYPE。

DOCTYPE 不会改变文档的解释方式。 < a href = “ http://www.webdevout.net/article/beware-of-xhtml # content _ type”rel = “ noReferrer”> 只有 MIME 类型可以.

返回文章页面

HTML WG 已经讨论过这个问题: 意图是允许 old (HTML-only)浏览器接受 XHTML 1.0文档 指南,并将它们作为 text/html 提供。因此,文档作为 Text/HTML 应该作为 HTML 而不是 XHTML 处理。

这是一个非常常见的陷阱,因为 W3C 验证器基本上忽略了这条规则,但是浏览器严格遵守 来自 WebKit blog 的 了解 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>

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

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

在 HTML5/XHTML5中,这一点没有改变,而且区别更加明显,因为你甚至没有额外的 DOCTYPEContent-Type是国王。


郑重声明,XHTML 规范允许任何元素通过使 XHTML 成为 XML 应用程序来自我关闭: [强调我的]

无论是否使用关键字 EMPTY 声明,任何没有内容的元素都可以使用空元素标记。

XHTML 规范也明确显示了这一点:

空元素必须具有结束标记,或者开始标记必须以 />结束。例如,<br/><hr></hr>

自闭语法适用于 application/xhtml + xml 中的所有元素。它在 text/html 中的任何元素上都不受支持,但是在 HTML4中为“空”或者在 HTML5中为“ void”的元素无论如何都不会使用结束标记,所以如果在这些元素上加一个斜杠,看起来就好像支持自闭语法一样。

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

适用于作者: area,base,br,coll,command,embed,events source,hr,img,input,link,meta,param,source

无效的作者: 基础字体,bgsound,框架,间隔,wbr

除了 HTML5中的一些新内容之外,这应该可以让您了解在将 XHTML 作为 text/html 提供时可能支持的内容。(只需通过检查生成的 DOM 来测试它们。)

至于作为 application/XHTML + XML 的 XHTML (这使它成为 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>标签时,一切都正常了。为什么不同的网页我在同一个浏览器,我不知道,但它是一个很大的解脱,找到了解决方案!

更好的问题是: 哪些标记可以在 HTML 模式下自动关闭而不影响代码?答: 只有那些内容为空的才是无效的。 根据 HTML 规格,以下元素为 void:

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

< p > 旧版本的规范也列出了 command。 此外,根据各种来源,以下过时或非标准的标签是无效的:

basefont, bgsound, frame, isindex

它们在 HTML5中被称为“ void”元素,它们在 官方 W3规格中列出。

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

截至2013年4月,它们是:

Area,base,br,coll,command,embed,hr,img,input,keygen,link,meta,param,source,track,wbr

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

Area,base,br,coll,embed,hr,img,input,link,meta,param,source,track,wbr