提问人: 提问时间:8/24/2010 最后编辑:30 revs, 25 users 15%Ardent Coder 更新时间:4/10/2022 访问量:325670
(非无效)自闭合标记在 HTML5 中是否有效?
Are (non-void) self-closing tags valid in HTML5?
问:
W3C 验证器(维基百科)不喜欢在非 void 元素上使用自闭合标签(以 “” 结尾的标签)。(void 元素是指那些可能不包含任何内容的元素。它们在 HTML5 中仍然有效吗?/>
可接受的 void 元素的一些示例:
<br />
<img src="" />
<input type="text" name="username" />
被拒绝的非 void 元素的一些示例:
<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
注意: W3C 验证器实际上接受 void 自闭合标签:作者最初因为一个简单的拼写错误(
\
>而不是 />
)而遇到了问题;然而,自闭合标签在 HTML5 中通常不是 100% 有效的,答案详细阐述了各种 HTML 风格的自闭合标签的问题。
答:
(理论上)在 HTML 4 中,(是的,根本没有)意味着(这导致意义(即)和意义)。我使用“理论上”一词,因为这是浏览器在支持方面做得非常糟糕的SGML规则。支持太少了(我只见过它在 emacs-w3m 中工作),以至于规范建议作者避免使用语法。
<foo /
>
<foo>
<br />
<br>>
<br>>
<title/hello/
<title>hello</title>
在 XHTML 中,<
foo
/> 表示 <foo></foo>
。这是适用于所有 XML 文档的 XML 规则。也就是说,XHTML通常(至少在历史上)由浏览器使用与文档不同的解析器进行处理。W3C 提供了 XHTML 的兼容性准则。(本质上:仅当元素定义为 EMPTY(并且 HTML 规范中禁止使用结束标记)时,才使用自闭合标记语法)。text/html
application/xhtml+xml
text/html
在 HTML5 中,含义取决于元素的类型:
<foo />
评论
<object data="..." />
<img src="..."></src>
<object data="..."></object>
<img src="..." />
text/html
<img ...></img>
<img ...>
<img ... />
<img ...></img>
<tag></tag>
</br>
<br>
<br></br>
</br>
自闭合标记在 HTML5 中有效,但不是必需的。
<br>
而且都很好。<br />
评论
/>
<p/>
<div/>
<... />
/
在实践中,在 HTML 中使用自闭合标记应该像您预期的那样工作。但是,如果您担心编写有效的 HTML5,您应该了解在您可以使用的两种不同的语法形式中使用此类标记的行为。HTML5 定义了 HTML 语法和 XHTML 语法,它们相似但不完全相同。使用哪一个取决于 Web 服务器发送的媒体类型。
更有可能的是,您的页面被提供为 ,它遵循更宽松的 HTML 语法。在这些情况下,HTML5 允许某些开始标记在终止>之前具有可选的 /。在这些情况下,/ 是可选的,并且被忽略,因此 和 是相同的。HTML 规范称这些为“void 元素”,并给出有效元素的列表。严格来说,可选的 / 仅在这些 void 元素的开始标记中有效;例如,和 是有效的 HTML5,但不是。text/html
<hr>
<hr />
<br />
<hr />
<p />
HTML5 规范明确区分了 HTML 作者和 Web 浏览器开发人员的正确性,第二组要求接受各种无效的“遗留”语法。在这种情况下,这意味着符合 HTML5 的浏览器将接受非法的自闭合标记,例如 ,并按照您的预期呈现它们。但对于作者来说,该页面将不是有效的HTML5。(更重要的是,你从使用这种非法语法中得到的 DOM 树可能会被严重搞砸;例如,自闭合标签往往会把事情搞砸很多)。<p />
<span />
(在服务器知道如何将 XHTML 文件作为 XML MIME 类型发送的异常情况下,页面需要符合 XHTML DTD 和 XML 语法。这意味着那些定义自闭合的元素需要自闭合标记。
评论
<a name="foo" />
<A>
自动关闭的 div 将不进行验证。这是因为 div 是普通元素,而不是 void 元素。
根据 HTML5 规范,不能包含任何内容的标签(称为 void 元素)可以自关闭*。这包括以下标记:
area, base, br, col, embed, hr, img, input,
link, meta, param, source, track, wbr
但是,“/”在上述标记上是完全可选的,因此与 没有什么不同,但无效。<img/>
<img>
<img></img>
*注意:外来元素也可以是自闭合的,但我认为这不在这个答案的范围之内。
评论
/
HTML5 基本上表现得好像尾部斜杠不存在一样。HTML5 语法中没有自闭合标签这样的东西。
非 void 元素上的自闭合标签(如 )根本不起作用。尾部斜杠将被忽略,这些斜杠将被视为开始标记。这可能会导致嵌套问题。
<p/>
<div/>
无论斜杠前面是否有空格,这都是正确的:并且由于同样的原因也不起作用。
<p />
<div />
像 或 这样的 void 元素上的自闭合标签会起作用,但只是因为尾部斜杠被忽略了,在这种情况下,这恰好会导致正确的行为。
<br/>
<img src="" alt=""/>
结果是,在旧的“XHTML 1.0 用作文本/html”中工作的任何内容都将继续像以前一样工作:那里也不接受非 void 标签上的尾部斜杠,而 void 元素上的尾部斜杠有效。
还有一点需要注意:可以将 HTML5 文档表示为 XML,这有时被称为“XHTML 5.0”。在这种情况下,XML 的规则适用,并且将始终处理自闭合标记。它始终需要使用 XML MIME 类型。
我会非常小心地使用自关闭标记,因为这个例子表明:
var a = '<span/><span/>';
var d = document.createElement('div');
d.innerHTML = a
console.log(d.innerHTML) // "<span><span></span></span>"
相反,我的直觉会是<span></span><span></span>
评论
On other [than void] HTML elements, the slash is an error, but error recovery will cause browsers to ignore it and treat the tag as a regular start tag. This will usually end up with a missing end tag causing subsequent elements to be children instead of siblings.
但是 - 仅供记录 - 这是无效的:
<address class="vcard">
<svg viewBox="0 0 800 400">
<rect width="800" height="400" fill="#000">
</svg>
</address>
这里的斜杠将使其再次有效:
<rect width="800" height="400" fill="#000"/>
评论
(非无效)自闭合标记在 HTML5 中是否有效?
当然,它们是有效的,但几乎没有修改。
以自闭合标签为例。<br>
即使你写了,或者它们最终会在浏览器中转换。<br/>
<br />
<br>
在以 或 结尾的自闭合标记中,(斜杠)和空格将被忽略。/>
/>
/
举个例子,让我们看看它在浏览器中的样子。
<p>This is paragraph with <br><br> and <br/><br/> and then <br /><br />.</p>
上面的代码在浏览器中如下图所示。
您可以看到全部转换为 .因此,您可以选择是否关闭自闭合标签,但它们是完全有效的。<br>
评论
\>
/>
/>