目前市面上流行的瀏覽器有多種,這些瀏覽器在處理乙個相同的頁面時,表現或行為有時會有差異。這種差異可能很小,甚至不會被注意到;也可能很大,甚至造成在某個瀏覽器下無法正常瀏覽。我們把引起這些差異的問題統稱為「瀏覽器相容性問題」。
各品牌瀏覽器的核心是不同的,不同的核心處理同一段**的時候思路不同。因此可以說,瀏覽器間核心的差異是產生相容性問題的根本原因。
「核心」也稱為「引擎」。常見的瀏覽器及其渲染引擎(又稱排版引擎)、指令碼引擎的列表如下:
browser name
layout engine
ecmascript engine
internet explorer 6 - 8
trident
jscript
firefox 3.5
gecko
tracemonkey
chrome 4
webkit
v8safari 4
webkit
squirrelfish extreme
opera 10
presto
carakan
瀏覽器的工作模式常被稱為「渲染模式」。實際上瀏覽器不同的工作模式不僅對渲染有影響,對**的解析以及指令碼的行為也同樣有影響。
從更廣泛的角度來看,瀏覽器的工作模式的差異不僅體現在處理 html 頁面的時候,處理 xml 及一些非 web 內容時也有模式上的差異,但本文僅討論瀏覽器在處理 html 頁面時工作模式。
注:關於瀏覽器的工作模式的更多資訊,請參考 activating browser modes with doctype。
微軟於 2001 年 8 月 27 日發布的 ie6(internet explorer 6)增強了對 css1 的相容,這使得 ie6 對 css 的解析及渲染與它的前乙個版本 ie5.5 有了很大的差別,如對盒模型的理解、**尺寸的演算法等。
為了保持良好的向後相容性,微軟為使用者提供了乙個「開關」,來決定瀏覽器的工作模式,這個「開關」就是頁面頂部的 dtd。
某些 dtd 將使 ie6 工作在「標準相容模式」(即「標準模式」),這種模式使用了 ie6 最新的處理方式,包括對 css1 的相容及一些 dhtml 方面的增強。
而另一些 dtd,包括不設定 dtd 將使 ie6 工作在「向後相容模式」(即「混雜模式」),這種模式對頁面的處理是與 ie5.5 保持一致的,這樣就可以保證對一些在 ie5.5 中表現良好的頁面在 ie6 中也能達到同樣的效果。
微軟在後續推出的 ie7、ie8 中,也使用了上述「開關」,與 ie6 一樣,在 ie7、ie8 的「混雜模式」下,對頁面處理方式仍與 ie5.5 一致。因此可以說,ie 系列的「混雜模式」,將瀏覽器的行為凍結在了 ie5.5 這個版本,雖然 ie 各版本的混雜模式也略有區別,但它們的本意都是向後相容。
隨著時間的推進和標準的進步,ie6、ie7 的「標準模式」逐漸已經變得不夠標準了,2023年3月19日發布的 ie8 重新定義了「標準模式」,再次增強了對標準規範的支援,同時為了保持對 ie7 的相容,ie8 增加了一種工作模式:「接近標準模式」。於是,ie8 的工作模式就分成了三種:「標準模式」、「接近標準模式」和「混雜模式」。
目前所有主流瀏覽器對於向後相容問題的處理都與 ie 系列一樣,提供了不同的模式來保證向後相容。
瀏覽器的工作模式就是在這種背景下誕生的,它很好的解決了瀏覽器對標準支援上的不斷增強及對一些錯誤的修復而導致的向後相容問題,但也將瀏覽器在不同情況下的表現及行為變得更加複雜多樣。
通過以上的內容,我們可以得出結論:如果乙個頁面能使各瀏覽器都工作在「標準模式」下,那麼各瀏覽器都將盡量相容標準,因此各瀏覽器之間表現出的差異是很少的。相反,如果乙個頁面使各瀏覽器都工作在「混雜模式」下,那麼各瀏覽器都將盡量向後相容,因此各瀏覽器之間表現出的差異將會最大化。
注:關於 ie6 的更多資訊,請參考 維基百科 - internet explorer 6。
關於此問題,請參考 w3h - rd8001: 各瀏覽器中 'width' 和 'height' 在某些元素上的作用位置有差異。
關於此問題,請參考 w3h - re8017: ie firefox opera 的混雜模式對於 td 元素的百分比高度計算錯誤。
關於 ie6 對瀏覽器工作模式的區分的詳細資訊,請參考 msdn - css enhancements in internet explorer 6。
比如 ie6 的混雜模式有著名的「雙邊距 bug」,而 ie7 和 ie8 的混雜模式則沒有這個問題。
關於此問題,請參考 w3h - rx2001: ie5.0 ie5.5 ie6 中浮動元素在某些情況下會有雙倍外邊距。
document.compatmode 最先出現在 ie6 中,它的值標示了瀏覽器的工作模式,「標準模式」返回「css1compat」,「混雜模式」返回「backcompat」。這一做法到目前為止仍被所有主流瀏覽器所採用。
需要注意的是:在後來出現的「接近標準模式」中,document.compatmode 的返回值與「標準模式」一致,為「css1compat」。也就是說,不能通過 document.compatmode 來詳細區分瀏覽器的工作模式,只能用來判斷瀏覽器是否工作在「混雜模式」下。
因為「標準模式」與「接近標準模式」之間的差異並不大,所以這個方法至今仍被廣泛使用。
關於 firefox 中 dtd 與瀏覽器工作模式的詳細資訊,請參考 mozilla's doctype sniffing,關於 opera 中 dtd 與瀏覽器工作模式的詳細資訊,請參考 doctype switches support in opera presto 2.6。
在編寫乙個頁面時,要使用可以觸發各瀏覽器「標準模式」的dtd,並書寫符合規範的**,以保證您的頁面在各瀏覽器中可以最大程度的相容。
瀏覽器相容性問題
苦惱的區別 1.image repeat 在火狐裡比較正常,可是在ie中一直repeat.背景是乙個關閉的x號,div設定的backgourn image url xx 結果在ie中卻不行,最後找到原因是ie中要顯式的寫上image repeat norepeat這屬性,還有好多的差異,明天 去了 ...
瀏覽器相容性問題
瀏覽器相容問題一 不同瀏覽器的標籤預設的外補丁和內補丁不同 問題症狀 隨便寫幾個標籤,不加樣式控制的情況下,各自的margin 和padding差異較大。碰到頻率 100 解決方案 css裡 備註 這個是最常見的也是最易解決的乙個瀏覽器相容性問題,幾乎所有的css檔案開頭都會用萬用字元 來設定各個標...
瀏覽器相容性問題
解決方案 應該用ie8相容模式瀏覽網頁,而不應該用ie9或ie10渲染模式.很多使用者安裝ie10後發生很多網頁顯示錯亂,就是相容性的原因,因為ie10預設的渲染模式是ie10.此時應該將其改為ie7渲染模式。為什麼用ie6 7渲染模式的原因如下 中國所有網頁肯定都支援ie,支援ie就是支援ie核心...