/>
”结尾的标签)。 (无效元素是可能永远不包含任何内容的元素。)它们在HTML5中仍然有效吗?一些可接受的void元素示例:
<br />
<img src="" />
<input type="text" name="username" />
拒绝的非空元素的一些示例:
<div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
注意:
W3C验证器实际上接受无效的自动关闭标签:作者本来是因为简单的错字(
\>
而不是/>
)而遇到了问题;但是,自关闭标签在HTML5中通常不是100%有效的,答案详细说明了各种HTML样式的自关闭标签。#1 楼
在HTML 4中,
<foo /
(是,根本没有>
)表示<foo>
(导致<br />
表示<br>>
(即<br>>
)和<title/hello/
表示<title>hello</title>
)。这是一条SGML规则,浏览器在支持方面做得很差,该规范建议作者避免使用语法。在XHTML中,
<foo />
表示<foo></foo>
。这是一条适用于所有XML文档的XML规则。就是说,XHTML通常用作text/html
,它(至少在历史上至少)由浏览器使用与用作application/xhtml+xml
的文档不同的解析器进行处理。 W3C提供了x4312079q的XHTML兼容性指南。 (本质上:仅当元素定义为EMPTY时才使用自闭标签语法(并且HTML规范中禁止使用结束标签)。)在HTML5中,
text/html
的含义取决于类型在指定为void元素的HTML元素上(本质上是“在HTML5之前存在且被禁止包含任何内容的元素”),只是禁止了end标签。在开始标记末尾的斜杠是允许的,但没有任何意义。对于仅沉迷于XML的人(和语法突出显示)来说,它只是语法糖。 在其他HTML元素上,斜杠是一个错误,但是错误恢复将导致浏览器将其忽略,并将该标记视为常规的开始标记。这通常会导致缺少结束标记,从而导致后续元素成为子元素而不是兄弟元素。
(从XML应用程序(例如SVG)XML导入的外国元素)将其视为自动关闭语法。
评论
“……迷恋XML的人。”。您似乎暗示XML合规性不好。但是,HTML5的最终结果似乎是,无论如何我们仍然必须处理尖括号(即XML的大多数不便之处),同时使使用基于XML的工具(例如模板工具或各种处理器)更加困难)。即使从世代的角度来看,似乎和 src>都不行,而
#2 楼
正如Nikita Skvortsov所指出的,自关闭div不会生效。这是因为div是普通元素,而不是void元素。根据HTML5规范,不能包含任何内容的标记(称为void元素)可以自动关闭*。其中包括以下标记:
*注意:外部元素也可以是自动闭合的,但我认为这不是此答案的范围。
评论
IE10的开发人员工具给我“ HTML1500:标记不能自动关闭。请使用显式关闭标记。”在行上,为什么会这样呢?
–印第詹姆斯(James in Indy)
13-10-14在11:54
好的,我发现自闭标签不应该带有斜线(删除它可以解决我的错误)。引用:tiffanybbrown.com/2011/03/23/…
–印第詹姆斯(James in Indy)
13-10-14在12:11
规格已更改。现在,当用作HTML 5文档类型时,“ void”或“ self-closes”元素不应包含斜杠。但是,如果将其用作XHTML,则可能需要使用斜杠(在这种情况下,请检查文档)。在实际使用中,即使包含了结束符/,页面也通常会按预期显示,但这并不是有效的措施(它取决于浏览器是否有效地为您重新编写代码,并按您的预期进行解释。)如果出于某种原因您的页面需要通过HTML 5验证,那么如果您关闭void元素的标签,则该页面可能不会通过。
– SherylHohman
19年1月28日在23:47
关于@SherylHohman的评论,我不认为该规范已更改(或者,如果已更改,则已更改)。请参阅w3.org/TR/html5/syntax.html#start-tags(8.1.2.1.6)-void(或外来)元素可能仍包含斜杠。
– ChristC
19年2月25日在10:43
#3 楼
在实践中,在HTML中使用自动关闭标签应该可以按预期工作。但是,如果您担心编写有效的HTML5,则应该了解在使用的两种不同的两种语法形式中,此类标记的用法是如何表现的。 HTML5定义了HTML语法和XHTML语法,它们相似但不相同。使用哪一种取决于Web服务器发送的媒体类型。您的页面很有可能被用作
text/html
,它遵循更宽松的HTML语法。在这些情况下,HTML5允许某些开始标记在终止>之前具有可选的/。在这些情况下,/是可选的并且被忽略,因此<hr>
和<hr />
是相同的。 HTML规范将这些称为“无效元素”,并给出有效列表。严格来说,可选的/只在这些void元素的开始标记内有效;例如,<br />
和<hr />
是有效的HTML5,但<p />
无效。HTML5规范对HTML作者和Web浏览器开发人员的正确选择进行了明确区分,第二组要求接受各种无效的“旧版”语法。在这种情况下,这意味着符合HTML5的浏览器将接受非法的自关闭标签(例如
<p />
),并按您期望的方式呈现它们。但是对于作者而言,该页面不是有效的HTML5。 (更重要的是,使用这种非法语法获得的DOM树可能会被严重破坏;例如,自封闭的<span />
标签往往会使事情搞砸了)。(在如果服务器知道如何将XHTML文件作为XML MIME类型发送,这种特殊情况下,页面需要符合XHTML DTD和XML语法。这意味着定义此类元素需要自闭标签。)
评论
将被视为开始标签,而不是自闭合标签。这意味着文档的其余部分将被视为位于P元素内。那不是我“可能期望的”,并且会在任何不平凡的页面上造成严重的混乱。
–mhsmith
13年5月20日在17:09
#4 楼
HTML5的行为基本上就像没有尾部斜杠一样。 HTML5语法中没有自动关闭标签。非空元素(例如
<p/>
,<div/>
)上的自动关闭标签根本无法使用。尾部的斜杠将被忽略,这些将被视为开始标记。这很可能导致嵌套问题。不管斜杠前面是否有空格,这都是正确的:
<p />
和<div />
出于相同的原因也无法工作。像
<br/>
或<img src="" alt=""/>
这样的void元素上的自动关闭标签将起作用,但这仅是因为尾部的斜杠被忽略了,在这种情况下碰巧会导致正确的行为。结果是,在旧的“ XHTML 1.0用作text / html”中工作的所有内容都将像以前一样继续工作:非空标记的尾部斜杠在那儿也不被接受,而void元素的尾部斜杠也可以工作。
另外一个注意事项:可以将HTML5文档表示为XML,有时也称为“ XHTML 5.0”。在这种情况下,将应用XML规则,并且将始终处理自闭合标签。它总是需要与XML mime类型一起提供。
#5 楼
自闭标签在HTML5中有效,但不是必需的。<br>
和<br />
都可以。评论
根据HTML5规范,自闭语法(/>)不能用于非无效HTML元素。
– naXa
15年7月30日在12:20
问题是关于非空元素(例如或)上的自闭合标签。
–胸骨
16-6-28在6:06
最初,问题不是专门针对非空元素。更像是,您仍可以像在XHTML中一样使用<... />,还是必须在HTML5中删除/?之后,该问题被多次更改。
–尼克
17年9月20日在8:37
无论哪种方式,答案都是斜杠将被忽略,这将破坏未声明为void的元素,但将与void元素兼容。
–胸骨
19年7月10日在1:31
#6 楼
我将非常小心使用自闭合标签,如本例所示:var a = '<span/><span/>';
var d = document.createElement('div');
d.innerHTML = a
console.log(d.innerHTML) // "<span><span></span></span>"
我的直觉会改为
<span></span><span></span>
评论
可接受的答案对此进行了描述:在其他[void] HTML元素上,斜杠是错误,但是错误恢复将导致浏览器将其忽略,并将该标记视为常规的开始标记。这通常会导致缺少结束标记,导致后续元素成为子元素而不是兄弟元素。
– Palec
17年5月20日在19:40
#7 楼
但是-仅作记录-这是无效的:<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"/>
评论
这是因为svg是用xml而不是html编写的。它使用不同的解析规则
–电动咖啡
19年8月20日在6:19
评论
@本:哦,对不起,我认为你是对的。在这种情况下,我误解了最初的问题,我以为OP想要知道自闭合标签在HTML5中是否完全有效。但这意味着他只是在代码中打了错字,或者他不知道如何适当地编写自闭标签,这使W3C验证程序将他的代码标记为无效是很有意义的。为了节省以后的读者的时间:是的,问题的语法不正确,否,您不应更改它。 OP已明确并合理地解释了原因。由于它引起了提示此问题的验证错误,因此不应更正语法。
你们还在为斜线应该面对的方向而斗争吗?来吧。
@BoltClock是的,仍在战斗。伙计们:如果这个问题是关于\>的,那么应该把它作为一个无用的“修正我的类型”问题来关闭。答案全部为/>。 />版本是唯一有用的版本。随它吧。
然后,该问题必须重新措词,因为W3C验证程序实际上接受自动关闭标签。在不损害其相对于原始意图的完整性的情况下,很难以这种方式重新表述该问题。因此,如果我们希望遵守SO的规则,那么我们可能不得不牺牲诸如此类问题的清晰度,即使为了更好地处理问题,似乎编辑问题是唯一明智的选择。平均。如果还有其他类似问题,我们可以再次讨论meta。