2013-02-19 66 views

回答

5

由SGML標準,文檔類型聲明指定文檔類型定義通過命名它,如W3C註冊。但是,通過HTML 4.01 spec,文檔必須具有三種備選文檔類型聲明中的一種,並且它們全都包含一個URL。

這就是這樣的理論,因爲瀏覽器實際上並不讀取DTD。他們將文檔類型聲明視爲魔術字符串,在doctype sniffing中。但是,在大多數瀏覽器中,瀏覽器模式的選擇受HTML 4.01 Transitional魔術字符串中是否存在URL影響。缺失時,它們在Quirks Mode中運行。當它出現時,大多數瀏覽器都以「標準模式」或「幾乎標準模式」運行。怪異模式意味着大量不同的怪癖,因此從它轉換到「標準模式」的效果可能意味着任何事情(從無效果到完全災難變化)。這種轉換通常需要仔細檢查,如果不重寫整個文檔。

5

您的里程將根據瀏覽器的版本有所不同,但這裏的它的短:

據我所知,瀏覽器不真正去任何努力來獲取和利用DTD的URL或以任何方式驗證代碼。因此,您的網頁在沒有文檔類型聲明的情況下工作「很好」,破損的文檔類型聲明以及許多其他破碎的表單。

當不通過驗證程序運行代碼時,在代碼頂部提供doctype定義的主要原因是將瀏覽器從怪癖模式拖入標準遵從模式,ala歷史災難與IE < 7。 ..

它的範圍之外一點點的怪癖和標準模式講座在這裏,所以好奇應該頭部到維基百科: http://en.wikipedia.org/wiki/Quirks_mode

Web瀏覽器使用自己比較亂的標準切換基於doctype的模式。你可能遇到的是當你的DTD缺少URL時怪異模式中的IE和當你添加URL時標準模式

您應該儘量包括完整的聲明,包括URL,並通過W3C驗證程序[1]運行您的代碼以獲得更好的效果。

修復有效代碼和完整文檔類型[2]的渲染問題。怪癖模式只是爲了向後兼容,所以無人維護的網站將盡可能長時間地繼續渲染。
如果您的網頁只能在怪癖模式下按預期進行渲染,您的網頁損壞

旁註:你應該認真問,爲什麼要在2013年用4.01過渡

[1] http://validator.w3.org/
[2] http://www.w3.org/QA/2002/04/valid-dtd-list.html

+0

首先,非常感謝您的回答,@Kiirani。我正在開發一個大約在10年前開發的遺留Web項目,因此您知道我無法避免使用4.01過渡文檔,因爲它始終在整個網站的頁面模板中定義。 – 2013-02-19 08:49:58

+0

我剛剛創建了一個靜態html,並測試了你提到的IE的可能行爲,你說得對。如果缺少DTD URL,IE處於怪異模式,否則處於標準模式。我的測試是在IE8中。 但是,現在,我無法修改doctype以包含URL,因爲它會破壞頁面呈現,尤其是表格元素... – 2013-02-19 09:15:57

相關問題