W3C验证器不喜欢非void元素上的自闭标签(以“ />
”结尾的标签)。 (无效元素是可能永远不包含任何内容的元素。)它们在HTML5中仍然有效吗? html
可接受的 void元素的一些示例: html5
<br /> <img src="" /> <input type="text" name="username" />
被拒绝的非空元素的一些示例: 浏览器
<div id="myDiv" /> <span id="mySpan" /> <textarea id="someTextMessage" />
注意: W3C验证器实际上接受无效的自动关闭标签:做者最初因出现简单的错字 ( \\>
而不是/>
)而遇到问题 ; 可是,自关闭标签在HTML5中一般不是100%有效的,答案详细说明了各类HTML样式的自关闭标签。 服务器
在HTML 4中 , <foo /
(是,根本没有>
)表示<foo>
(致使<br />
表示<br>>
(即<br>>
)和<title/hello/
表示<title>hello</title>
)。 这是一条SGML规则,浏览器在支持方面作得不好,而且该规范建议做者避免使用语法 。 app
在XHTML中 , <foo />
表示<foo></foo>
。 这是一条适用于全部XML文档的XML规则。 也就是说,XHTML一般用做text/html
,至少在历史上,XHTML是由浏览器使用与用做application/xhtml+xml
文档不一样的解析器处理的。 W3C提供了XHTML做为text/html
遵循的兼容性指南 。 (本质上:仅当元素定义为EMPTY时才使用自闭标签语法(而且HTML规范中禁止使用结束标签))。 ide
在HTML5中 , <foo />
的含义取决于元素的类型 。 spa
自关闭标签在HTML5中有效,但不是必需的。 code
<br>
和<br />
都很好。 xml
HTML5的行为基本上就像没有尾部斜杠同样。 HTML5语法中没有自动关闭标记之类的东西。 htm
非空元素(例如<p/>
, <div/>
上的自动关闭标签根本没法使用。 尾部的斜杠将被忽略,这些将被视为开始标记。 这极可能致使嵌套问题。
不管斜杠前面是否有空格,都是如此: <p />
和<div />
出于相同的缘由也将不起做用。
像<br/>
或<img src="" alt=""/>
这样的void元素上的自闭合标签将起做用,但这仅是由于尾部的斜杠被忽略了,在这种状况下碰巧会致使正确的行为。
结果是,在旧的“ XHTML 1.0用做text / html”中工做的全部内容都将像之前同样继续工做:非空标记的尾部斜杠在那儿也不被接受,而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>
在实践中,在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语法。这意味着对于这样定义的元素, 须要使用自动关闭标签。)