天天看點

浏覽器工作模式之标準模式/怪異模式/近似标準模式

1、 浏覽器工作模式(渲染模式)分類

浏覽器的工作模式被稱為“渲染模式”,會影響“渲染方式+代碼解析+腳本行為”;

從廣泛的角度講,浏覽器的工作模式的差異展現在處理“HTML、XML、非web内容”;

目前渲染模式的分類主要有3種:标準模式(又名嚴格模式)、近似标準模式、混雜模式(又名怪異模式)。

通過document.compatMode可獲知浏覽器目前采用的渲染模式:

浏覽器工作模式之标準模式/怪異模式/近似标準模式

2、為何劃分渲染模式

微軟的IE6相比IE5.5進行了巨大改進,IE6支援了部分CSS1的特性,例如盒模型的了解、表格尺寸計算。塊級元素的height和width在IE5.5中包括了内容+内邊距+邊框,而在IE6中僅包括内容。這導緻IE6與IE5.5在CSS的解析和渲染時有很大差異。為了向後相容,微軟為使用者提供了一個“開關”來選擇浏覽器的工作模式,這個開關就是DTD(document type definition)。

某些DTD會使IE6工作在“标準模式”,此模式使得頁面以最新的CSS1方式處理;而某些DTD會使IE6工作在“混雜 模式”,此模式使得頁面以IE5.5的方式處理,這樣就能保證以前在IE5.5中正常顯示的頁面在IE6中還能正常顯示(即向後相容)。 混雜模式意味着:即使你用的是最進階的IE11浏覽器,在混雜模式中我們面對的浏覽器仍相當于老古董IE5.5, 解析出來的HTML文檔和IE5.5浏覽器解析出來的效果一樣。之後的IE7以及其他IE版本也采用此模式,但随着時間推進和标準進步,IE6/IE7中的标準模式已經逐漸不夠“标準”了。是以IE8中重新定義了“标準模式”,更大程度地支援新的标準規範。為了向後相容IE6/IE7,IE8新增了一種模式——“近似标準模式”,此模式相當于IE6/IE7中的“标準模式”。是以IE8以及之後的IE系列浏覽器就有3種工作模式:标準模式+近似标準模式+混雜模式。

3、DOCTYPE的意義

在浏覽器解析html文檔正文前得先确定文檔類型,以決定以何種方式渲染。渲染模式影響着浏覽器對CSS代碼甚至部分Javascript腳本的解析。

4、各種模式的觸發條件

1)  HTML文檔中沒有DOCTYPE聲明觸發混雜模式

2)  HTML文檔中用了錯誤的DOCTYPE會觸發混雜模式

3)  HTML文檔中有DOCTYPE,但DOCTYPE不是放在文檔最開始,其之前出現了其他内容(包括普通文本、HTML标簽、HTML注釋、XML聲明、IE條件注釋)

a)      若是普通文本和HTML标簽,各浏覽器均進入混雜模式
b)      若是HTML注釋,不會在頁面中展示出來,故非IE浏覽器會忽略其存在,正确解析DOCTYPE;IE浏覽器則會進入混雜模式
c)      若是XML聲明,不會在頁面中展示,故非IE浏覽器會忽略其存在,而IE6則會進入混雜模式
d)      若是IE條件注釋,各浏覽器均進入标準模式。是以如果真想在DOCTYPE之前寫東西但又想保證标準模式可以這樣做:<![if IE]><!—comment--><![endif]>

4)  HTML5的DOCTYPE:<!DOCTYPE html>觸發的是标準模式

5)  HTML4.01 Strict的DOCTYPE會觸發标準模式:<!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01//EN””http://www.w3.org/TR/html4/strict.dtd”>

6)  HTML4.01 Transitional的DOCTYPE會觸發近似标準模式:<!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">

總結:盡量讓浏覽器使用标準模式進行渲染,這樣能夠将相容性問題的風險降到最低。應該盡量保證DOCTYPE在文檔絕對開頭位置,而且盡量不在其之前插入任何内容。

附錄: 一些常見的 doctype

Q 代表“混雜模式”,A 代表“接近标準模式”,S 代表“标準模式”

浏覽器工作模式之标準模式/怪異模式/近似标準模式