Doctype做用?嚴格模式與混雜模式如何區分?它們有何意義?

怪異模式和嚴格模式(譯註:通常稱爲標準模式:Standards Mode,下文中的嚴格模式均可以理解爲標準模式)是瀏覽器解析CSS時的兩種‘模式’。這篇文章將簡單闡述這兩種模式之間的差別。瀏覽器

 

譯註:一個網頁通常由兩部分組成即:HTML(Hypertext Markup Language)和CSS(Cascade Style Sheets)。
HTML負責描述網頁的結構和內容(如標題,導航欄等),而CSS則負責網頁的表現(外觀)(如背景顏色,字體樣式等)。併發

 

問題的產生:

 

當Netscape4(譯註:網景公司早期的瀏覽器)和IE4(微軟公司早期的瀏覽器)實現CSS機制時,並無遵循W3C提出的標準。Netscape4 提供了糟糕的支持,而IE4 雖然接近標準,但依舊未能徹底正確的支持標準。儘管IE 5 修復了IE4 許多的問題(bugs),可是依然延續CSS實現中的其它故障(主要是盒模型(box model)問題)。字體

 

爲了保證本身的網站在不一樣的瀏覽器中都能正確展示,網頁開發者不得不依據各個瀏覽器的自身的規範來使用CSS。所以大部分網站的CSS實現並未符合W3C的標準。網站

 

然而隨着標準一致性變得愈來愈重要,瀏覽器開發商不得不面臨一個艱難的抉擇:逐漸遵循W3C的標準是前進的方向。可是改變現有CSS的實現,完整去遵循標準,會使許多網站或多或少受到破壞。若是瀏覽器忽然以正確的方式解析現存的CSS,陳舊的網站顯示必然受到影響。圖片

 

所以當即遵循標準會產生問題,然而忽略標準則又會維持瀏覽器大戰時(譯註:微軟和網景之間的一段競爭)所產生的混亂。開發

 

解決方案:

 

任何的解決方案必須跟隨以下兩個方面:文檔

1:容許網站開發者可以選擇他們所熟知的模式。get

2:依然使用舊式規則顯示陳舊的網站。it

 

換句話說,全部的瀏覽器須要提供兩種模式:怪異模式(即兼容模式)服務於舊式規則,嚴格模式服務於標準規則。Mac平臺的IE瀏覽器最早實現這兩種模式,Mozilla, Safari、Opera和Windows平臺的IE6也相繼實現了這兩種模式。WIndows平臺的IE5和Netscape4則只提供了怪異模式。網站開發

 

選擇使用哪一種模式須要一個觸發器,而 「DOCTYP切換」 則用於此目的。依照標準,任何一個(X)HTML文檔必須擁有一個DOCTYPE(譯註:DTD(文檔類型定義)是一組機器可讀的規則,它們指示(X)HTML文檔中容許有什麼,不容許有什麼,DOCTYPE正是用來告訴瀏覽器使用哪一種DTD,通常放在(X)HTML文檔開頭聲明)用以告訴其餘人這個文檔的類型風格

      1:產生於標準化浪潮之前的網頁並無DOCTYPE聲明。所以'沒有DOCTYPE'意味着觸發怪異模式:既依據舊式的CSS規則渲染網頁。

      2:相反,若是開發者明確知道包含DOCTYPE,他們應該明白他們想要怎麼作。所以大部分的DOCTYPE聲明將觸發嚴格模式:即依據標準的CSS規則渲染網頁。

      3:任何新的或未知的DOCTYPE將觸發嚴格模式。

      4:一些頁面依據怪異模式而寫,可是卻包含DOCTYPE。這種狀況下各個瀏覽器依據本身的DOCTYPE規則列表來觸發怪異模式,參照這個瀏覽器比較圖表 。

 

 

注意:你的網頁並不必定要依據所選擇的DOCTYPE去得到有效性驗證,一個DOCTYPE標籤足以觸發嚴格模式。

 

我在大部分網頁中使用以下的DOCTYPE。它除了聲明個人網頁是XHTML 1.0 過渡類型以外,還將在全部瀏覽器中觸發「準嚴格模式」(譯註:下文將介紹這個模式)

 

完美的解決方案?

 

就我的而言,我並不十分滿意「DOCTYPE切換」方案。一個DOCTYPE所提供的信息是(X)HTML文檔所擁有的類型風格,即文檔的結構,而不該該提供任何關於文檔表現(外觀)的信息,由於那違反了CSS關於頁面結構和表現分離的原則。

 

併發症:準嚴格模式

 

在早些時候,嘗試使用嚴格模式老是會產生關於圖片會忽然得到舊式的底部邊距,而且沒法移除的討論。產生這個現象的緣由是嚴格模式將怪異模式和嚴格模式標籤當成行內元素,這意味着一些空間將被保留給一些擁有」尾部「的字符如(g, j, q),而圖片並無「尾部」字符,因此這些空間將不會被使用,可是卻依舊保留着。

 

解決辦法是聲明圖片爲塊級元素{display:block}

 

瀏覽器廠商,尤爲是Mozilla,認爲這是一種產生困惑的狀況,因而他們引入了「準嚴格模式」(譯註:也稱爲準標準模式 Almost Standards Mode),這與嚴格模式同樣,除了它將圖片看成塊級元素而不是行內元素。

 

Windows平臺IE的特殊性 : XML聲明

 

在Windows平臺的IE6 瀏覽器中,微軟實現了一個額外的規則:若是DOCTYPE聲明在XML聲明以後,將觸發怪異模式。這樣作是爲了容許開發者在怪異模式下得到「有效的網頁」 (須要DOCTYPE)。下面是XML聲明,你須要將它放在頁面的開頭,在DOCTYPE以前。

注意這種行爲已經從IE7 中移除。

 

譯註:Peter-Paul Koch在這篇文章後面列出了怪異模式和嚴格模式在不一樣瀏覽器中的一些重要表現,建議瞭解一下

相關文章
相關標籤/搜索