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語法。這意味着對於這樣定義的元素, 須要使用自動關閉標籤。)