2011-08-24 97 views
4

今天我遇到了IE條件註釋的使用,這是我以前從未見過的,哪個讓我撓頭。 HTML開始像這樣在IE中特有的條件註釋使用

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<!--[if IE 7 ]> <html class="no-js ie7" lang="en"> <![endif]--> 
<!--[if IE 8 ]> <html class="no-js ie8" lang="en"> <![endif]--> 
... 
</html> 

我想知道IE7如何處理這個文檔。看起來該文檔最終會有兩個html標籤,第一個未被封閉。當然,這不會解析。但它確實如此。 我決定調查。

在IE9中的IE7瀏覽器模式下,HTML標籤最終成爲

<html class="no-js ie7" lang="en" xmlns="http://www.w3.org/1999/xhtml"> 

看來,從附帶條件註釋的HTML標籤的屬性被合併到現有的HTML標籤。經過進一步的修改後,似乎條件html標籤中的屬性會添加到現有標籤,如果它們不存在於第一個html標籤中的話。因此,例如:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html class="not so fast" xmlns="http://www.w3.org/1999/xhtml"> 
    <!--[if IE 7 ]> <html class="no-js ie7" lang="en"> <![endif]--> 

結果:

<html class="not so fast" lang="en" xmlns="http://www.w3.org/1999/xhtml" sizcache="0" sizset="0"> 

這裏,有條件地包括HTML標籤的class屬性已經沒有任何影響,因爲無條件HTML標籤已經定義了一個類屬性。如果sizcache和sizset屬性來自完全神祕的話。

無論如何,這些觀察到的行爲都不是我所期待的。有關條件評論的微軟文檔沒有提及關於這種情況評論的使用,谷歌搜索已經出現乾涸。 後面的頁面包含一個樣式表,該樣式表具有引用ie7和ie8類的選擇器,以在IE 7和8不正確地呈現它們的情況下覆蓋標準樣式。

我只是好奇,如果有人看到這種使用條件註釋或知道這種混合行爲是否記錄在任何地方。

+0

經過進一步調查發現,我的問題與條件評論無關。相反,它是一個什麼樣的瀏覽器將與文檔做如 ' 問題 ' IE和火狐似乎合併兩個html標籤,如本文所述。 – smarcaurele

回答