3 回答

TA貢獻1868條經驗 獲得超4個贊
嚴格來說,該<div>
元素是HTML中的非空/非空元素,即,它并非旨在自封閉。盡管<div />
是有效的XHTML(由于/>
表示有一個自動關閉(或為空)的XML元素),但普通的HTML解析器和某些驗證器將其解釋為未封閉的開始標記,因此是無效的HTML 4.01和HTML5。1個
實際上,通過W3C驗證程序(作為HTML5)運行給定的HTML片段會導致以下錯誤消息:
在非無效HTML元素上使用的自動關閉語法(/>)。忽略斜杠并將其視為開始標記。
因此,您所看到的。
根據(jù)HTML5規(guī)范(在第一個鏈接中):
非void元素必須具有結束標記,除非此參考文獻的HTML元素部分中該元素的子部分指出可以省略其結束標記。
之后,該<div>
元素的小節(jié)指出:
div元素必須同時具有開始標簽和結束標簽。
這使得<div>
與眾不同<p>
或<li>
已知并非總是需要結束標記。
如果<p>
在未關閉的位置后緊接一個<p>
,它將隱式關閉前一個<p>
。同樣適用<li>
。這是因為您不能直接將多個段落或列表項嵌套在一起。但是,<div>
可嵌套到任何深度。因此,打開<div>
標簽不會關閉先前未打開的<div>
標簽。
這就是為什么您看到自己所看到的。
1 在真正的XHTML頁面中(通過充當序列化為XML application/xhtml+xml
),第一個<div />
元素將不會擴展以包裝第二個<div>text</div>
元素。取而代之的是,作為XHTML,它將遵循XML規(guī)則并將其自身包含為一個空元素,而不是遵循HTML標記湯規(guī)則并被自身解釋為開始標記。

TA貢獻1812條經驗 獲得超5個贊
這是因為傳統(tǒng)的HTML解析器從未編程過自動關閉元素/>
。驗證器認為這/>
是>
因為HTML解析器正是這樣做的。現(xiàn)在不能在HTML5解析器中更改此行為,因為它會破壞太多依賴于皇家混亂(即HTML標記湯)的網(wǎng)站。但是,正如我在第一個腳注中提到的那樣,如果您真的想在頁面中自動關閉“空”元素(而不是真正的void元素),請將您的頁面序列化為XML,您將可以自由使用(實際上是必需的)遵循XML規(guī)則。
添加回答
舉報