2014-09-23 66 views
0

JSBIN

HTML

<p> 
    <div>123</div> 
</p> 

CSS

p div{ 
    background:#f00; 
} 

我有一個奇怪的問題。當我編碼結構如下HTML。實際上,用戶代理(瀏覽器)解析代碼:爲什麼在包含DIV時爲P標籤彈出DIV?

<p></p><div>123</div> 

所以,CSS代碼是ineffective.you可以檢查出來的JSBIN。我想知道這個行爲是否原因有另一類似的標籤有這種行爲?謝謝。

回答

1

這是HTML的兩個功能的組合。

首先,p元素不允許包含div元素。 spec將其內容模型設置爲「短語內容」,其中不包括div元素。

其次,p元素的結束標記是可選的。 (見標籤遺漏上面的鏈接到規範下)

<p> <!-- Start P element --> 
<div> <!-- Start DIV element. Implicitly end P element --> 
123 <!-- Add text node --> 
</div> <!-- End DIV element --> 
</p> <!-- No open P element so this is discarded by the parser --> 
+0

但如果'了''包含div'。沒關係。我想知道是否存在定義標籤行爲的自然原因。是關於W3C草案嗎? – 2014-10-24 10:13:57

+0

只要HTML有段落和div,回答中描述的兩個特徵就是真實的,這與草稿狀態無關。被允許包含div元素的錨是HTML 5的新成員,但錨的結束標記從來不是可選的,所以瀏覽器以與HTML 5規範一致的方式執行錯誤恢復。 – Quentin 2014-10-24 10:16:01

+0

問題是你正在建造'標籤湯'。因爲你在'

'內放入了一個不允許的元素,所以瀏覽器猜測你並沒有將它用作塊元素,而是作爲段落分隔符代替 - 是有道理的,因爲它在新的標籤之前從未遇到過'

'標籤塊級元素被發現。寫有效的HTML和所有將沒事。正如@Quentin正確地注意到,自上個世紀末推出div之後,你的源代碼就無效了。 – 2014-10-24 10:28:20