瀏覽器Quirksmode與CSS1compat

Quirks mode(怪異模式)和Standars mode(標準模式)

由於歷史的原因,各個瀏覽器在對頁面的渲染上存在差異,甚至同一瀏覽器在不同版本中,對頁面的渲染也不同。在W3C標準出臺以前,瀏覽器在對頁面的渲染上沒有統一規範,產生了差異(Quirks mode或者稱爲Compatibility Mode);由於W3C標準的推出,瀏覽器渲染頁面有了統一的標準(CSScompat或稱爲Strict mode也有叫做Standars mode),這就是二者最簡單的區別。


     W3C標準推出以後,瀏覽器都開始採納新標準,但存在一個問題就是如何保證舊的網頁還能繼續瀏覽,在標準出來以前,很多頁面都是根據舊的渲染方法編寫的,如果用的標準來渲染,將導致頁面顯示異常。爲保持瀏覽器渲染的兼容性,使以前的頁面能夠正常瀏覽,瀏覽器都保留了舊的渲染方法(如:微軟的IE)。這樣瀏覽器渲染上就產生了Quircks mode和Standars mode,兩種渲染方法共存在一個瀏覽器上。
    
     那麼瀏覽器究竟該採用哪種模式渲染呢?這就引出的DTD,既是網頁的頭部聲明,瀏覽器會通過識別DTD而採用相對應的渲染模式:

1. 瀏覽器要使老舊的網頁正常工作,但這部分網頁是沒有doctype聲明的,所以瀏覽器對沒有doctype聲明的網頁採用quirks mode解析。  
2. 對於擁有doctype聲明的網頁,什麼瀏覽器採用何種模式解析,這裏有一張詳細列表可參考:http://hsivonen.iki.fi/doctype/  
3. 對於擁有doctype聲明的網頁,這裏有幾條簡單的規則可用於判斷:對於那些瀏覽器不能識別的doctype聲明,瀏覽器採用strict mode解析
4. 在doctype聲明中,沒有使用DTD聲明或者使用HTML4以下(不包括HTML4)的DTD聲明時,基本所有的瀏覽器都是使用quirks mode呈現,其他的則使用strict mode解析。
5. 可以這麼說,在現有有doctype聲明的網頁,絕大多數是採用strict mode進行解析的。
6. 在ie6中,如果在doctype聲明前有一個xml聲明(比如:<?xml version="1.0" encoding="iso-8859-1"?>),則採用quirks mode解析。這條規則在ie7中已經移除了。


     Quirks mode和Standars mode最大的不同就是提現在對盒模式的解釋上,這也是我們在js裏要注意的地方。
     什麼是盒模式? 這是針對塊級元素說的,說白了就是把塊級元素想像成一個裝東西的盒子,而margin,padding,border,width這些css屬性構成了盒模式。  

在Standars mode中: 

元素真正的寬度 = margin-left   +   border-left-width   +   padding-left   + width   +   padding-right   +   border-right-width   +   margin-right;  

在Quirks mode中: 

width則是元素的實際寬度,內容寬度 = width   -   (margin-left   +   margin-right   +   padding-left   +   padding-right   +   border-left-width   +   border-right-width)

1. 內聯元素 ,例如<a>|<span>等,定義上下邊界不會影響到行高(line-height),內聯元素距離上一行元素的距離由行高決定,而不是填充或邊界。  
2.   內聯元素(display: inline) 內聯元素不需要在新行內顯示,而且也不強迫其後的元素換行,如a|em|span等都爲內聯元素。內聯元素可以爲任何其他元素的子元素。
3. 浮動元素(無論左或者右浮動)邊界不壓縮 ,且若浮動元素不聲明寬度,則其寬度趨向於0,即壓縮到其內容能承受的最小寬度。  
4. 如果盒中沒有內容,則即使定義了寬度和高度都爲100%,實際上只佔0% ,因此不會被顯示,此點在採取層佈局的時候需特別注意。  
5. 邊界值可爲負,其顯示效果各瀏覽器可能不相同。  
6. 填充值不可爲負。  
7. 邊框默認的樣式(border-style)爲不顯示(none)。

在js中如何判斷當前瀏覽器正在以何種方式解析?   
document對象有個屬性compatMode ,它有兩個值:

BackCompat     對應quirks mode
CSS1Compat     對應strict mode
 


各瀏覽器的兼容性表,可以查看PPK的網站: 

http://www.quirksmode.org/compatibility.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章