標準模式和怪異模式的來由
在HTML與CSS的標準化未完成之前,各個瀏覽器對于HTML和CSS的解析有各自不同的實現,而有很多舊的網頁都是按照這些非標準的實現去設計的。在HTML與CSS標準確定之后,瀏覽器一方面要按照標準去實現對HTML與CSS的支持,另一方面又要保證對非標準的舊網頁設計的后向兼容性。因此,現代的瀏覽器一般都有兩種渲染模式:標準模式和怪異模式。在標準模式下,瀏覽器按照HTML與CSS標準對文檔進行解析和渲染;而在怪異模式下,瀏覽器則按照舊有的非標準的實現方式對文檔進行解析和渲染。這樣的話,對于舊有的網頁,瀏覽器啟動怪異模式,就能夠使得舊網頁正常顯示;對于新的網頁,則可以啟動標準模式,使得新網頁能夠使用HTML與CSS的標準特性。
瀏覽器如何確定使用哪種渲染模式
知道了這兩種渲染模式的來由,那剩下的問題就是瀏覽器如何能夠確定應該使用哪種模式了。其實歸根結底就是,瀏覽器如何能將舊網頁與新網頁區分開來。
平常編寫網頁的時候,一般都會見到HTML文檔的頭部會有文檔類型聲明:DOCTYPE
。當瀏覽器遇到正確的文檔聲明時,瀏覽器就會啟動標準模式,按照制定的文檔類型標準解析和渲染文檔。而對于舊有的網頁,由于網頁編寫的當時標準還沒有確定,所以一般是不會有文檔類型聲明的。所以,對于沒有文檔類型聲明或者文檔類型聲明不正確的文檔,瀏覽器就會認為它是一個舊的HTML文檔,就會使用怪異模式解析和渲染該文檔。關于DOCTYPE
的更詳細說明,請戳這里 DOCTYPE聲明作用及用法詳解。
標準模式與怪異模式的兩個常見區別
- 盒模型的處理差異:標準CSS盒模型的寬度和高度等于內容區的高度和寬度,不包含內邊距和邊框,而IE6之前的瀏覽器實現的盒模型的寬高計算方式是包含內邊距和邊框的。因此,對于IE,怪異模式和標準模式下的盒模型寬高計算方式是不一樣的;
- 行內元素的垂直對齊:很多早期的瀏覽器對齊圖片至包含它們的盒子的下邊框,雖然CSS的規范要求它們被對齊至盒內文本的基線。標準模式下,基于Gecko的瀏覽器將會對齊至基線,而在quirks模式下它們會對齊至底部。最直接的例子就是圖片的顯示。在標準模式下,圖片并不是與父元素的下邊框對齊的,如果仔細觀察,你會發現圖片與父元素下邊框之間存在一點小空隙。那是因為標準模式下,圖片是基線對齊的。而怪異模式下,則不存在這個問題。具體請看這篇文章 CSS深入理解vertical-align和line-height的基友關系。