HTML5是否允許使用非空白自閉合標籤?
P粉680487967
2023-08-21 18:20:11
<p>W3C驗證器(維基百科)不喜歡在非空元素上使用自閉合標籤(以“<code>/></code>”結尾的標籤)。 (空元素是那些永遠不會包含任何內容的元素。)它們在HTML5中是否仍然有效? </p>
<p>一些被接受的空元素範例:</p>
<pre class="brush:html;toolbar:false;"><br />
<img src="" />
<input type="text" name="username" />
</pre>
<p>一些被拒絕的非空元素範例:</p>
<pre class="brush:html;toolbar:false;"><div id="myDiv" />
<span id="mySpan" />
<textarea id="someTextMessage" />
</pre>
<sub> <b>注意:</b> <p><br /></p><p>
W3C驗證器實際上接受空的自閉合標籤:作者最初遇到問題是因為簡單的拼字錯誤(使用了<code>></code>而不是<code>/></code> ;);然而,自閉合標籤在HTML5中並不完全有效,答案詳細闡述了不同HTML版本中的自閉合標籤問題。 </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 />
的意思取決於元素的類型: