2009-06-02 91 views

回答

34

編寫<!DOCTYPE>首先肯定是最佳實踐。

我記得奇怪的問題很長,很久以前這裏的一些瀏覽器(可能是IE6)忽略<!DOCTYPE>,因爲有之前的東西貌似無辜的 - 我認爲只是空格,但也許這是一個註釋。無論如何,這是一個可怕的,可怕的錯誤,必須追查,並且肯定沒有任何理由在<!DOCTYPE>之前發表評論或空白。

編寫<!DOCTYPE>首先,我想說的是,只有經驗豐富的Web開發人員才能避免可怕的,難以捉摸的錯誤。

+0

謝謝,我將把我的評論放在html標籤之後。 – 2009-06-02 19:36:12

+0

如果您希望它能正常工作,它需要包含之前的所有內容。 – nertzy 2009-12-09 21:49:36

+7

這只是咬我一口。我花了4個小時試圖弄清楚爲什麼IE7/8會渲染一切。在檢查每個標籤的正確大括號和東西后,我創建了一個新文件並逐行復制代碼(不是註釋),一切正常。 完全困惑,我隨意地想:「如果...怎麼辦?」當我注意到原始文件中DOCTYPE之前的註釋行時。有我的罪魁禍首! – dariopy 2012-01-26 21:14:02

3

這可能導致IE7在怪異模式呈現爲如果一個DOCTYPE是不存在在所有,根據this page

0

doctype之前的評論是允許的,但會導致全部 IE版本恢復到怪癖模式。實際上,它們有時用於這個目的。 XML聲明(<?xml version ...?>)具有相同的效果,IE6中的以下。

118

這是完全有效

<!-- this, --> 
<!DOCTYPE html> 

然而,它帶來所有版本的IE爲怪癖模式(除非它是被迫到無怪癖模式 - 請參閱下面的陷阱部分)。最簡單的方法是將註釋移到DOCTYPE下面。

<!DOCTYPE html> 
<!-- this, --> 

但另一種方式是「升級」註釋成適合條件評論,像這樣的:

<!--[if !IE]> this <![endif]--> 
<!DOCTYPE html> 

說明:一個條件評論呢不是計數作爲評論,在IE的世界。

替代語法:要忘記/記住,有條件的意見是微軟侵入HTML標準,人們可以例如做

<!--[if anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

同樣,瞄準IE尤其是一個可以做

<!--[if !anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

陷阱

註釋內部條件註釋會帶來IE成怪異模式如果IE看到它(即:如果一個使用一個[如果IE]條件,或等效爲[如果IE] - 諸如[if!anybrowser]條件,我上面提到。)。因此,舉例來說,這將帶來IE怪癖模式:

<![if IE]><!-- this --><![endif]> 
<!DOCTYPE html> 

正如

<!--[if IE]><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

和許多其它變體。而對於例如

<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

原因怪癖模式,因爲這裏的條件註釋有一個DOCTYPE 之前的任何其他內容,因此IE認爲頁面的第一個內容是DOCTYPE。

最後,最新的IE版本,IE8和IE9,可被迫到標準模式(和怪異模式以及)通過使用另一個Microsoft發明的 - 的X-UA-兼容指令。見http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx在這種情況下,然後

<!-- this --> 
<!DOCTYPE html> 
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 

IE8和IE9成無怪癖模式,而IE6和IE7將保持在怪癖模式。然而,與此相反,

<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 
<!DOCTYPE html> 

IE8和IE9爲標準模式,儘管的條件註釋的內容確實開始用DOCTYPE。而且IE6和IE7也將保持無怪異模式,因爲條件註釋並不針對它們。