Erlaubt HTML5 nicht leere selbstschließende Tags?
P粉680487967
2023-08-21 18:20:11
<p>Der W3C-Validator (Wikipedia) mag die Verwendung von selbstschließenden Tags (Tags, die auf „<code>/></code>“ enden) für nicht leere Elemente nicht. (Leere Elemente sind solche, die niemals Inhalte enthalten.) Sind sie in HTML5 noch gültig? </p>
<p>Einige Beispiele für akzeptierte leere Elemente: </p>
<pre class="brush:html;toolbar:false;"><br />
<img src="" />
<input type="text" name="username" />
</pre>
<p>Einige Beispiele für abgelehnte nicht leere Elemente: </p>
<pre class="brush:html;toolbar:false;"><div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
</pre>
<sub> <b>Hinweis: </b> <p><br /></p><p>
Der W3C-Validator akzeptiert tatsächlich leere selbstschließende Tags: Der Autor stieß ursprünglich auf das Problem aufgrund eines einfachen Tippfehlers (Verwendung von <code>></code> anstelle von <code>/></code> ;). ; Allerdings sind selbstschließende Tags in HTML5 nicht vollständig gültig, und die Antwort geht näher auf das Problem selbstschließender Tags in verschiedenen HTML-Versionen ein. </p></sub>
自闭合的div将无法验证。这是因为div是一个普通元素,而不是一个空元素。
根据HTML5规范,不能包含任何内容的标签(称为空元素)可以自闭合*。这包括以下标签:
上述标签上的“/”是完全可选的,因此
<img/>
与<img>
没有区别,但<img></img>
是无效的。*注意:外部元素也可以自闭合,但我认为这不在本答案的范围内。
在理论上,HTML 4中,
<foo /
(是的,没有任何>
)的意思是<foo>
(这导致<br />
的意思是<br>>
(即<br>>
)和<title/hello/
的意思是<title>hello</title>
)。我使用术语“理论上”是因为这是一个SGML规则,浏览器对其支持得非常差。支持非常少(我只在emacs-w3m中看到过它起作用),以至于规范建议作者避免使用这种语法。在XHTML中,
<foo />
的意思是<foo></foo>
。这是适用于所有XML文档的XML规则。也就是说,XHTML通常以text/html
的形式提供,这(至少在历史上)由浏览器使用与以application/xhtml+xml
提供的文档不同的解析器处理。W3C提供了关于XHTML作为text/html
的兼容性指南。(基本上:只有在元素被定义为EMPTY(并且在HTML规范中禁止了结束标签)时,才使用自闭合标签语法)。在HTML5中,
<foo />
的含义取决于元素的类型: