盒子模型(box model)是 css 的核心,現代 web 布局設計簡單說就是一堆盒子的排列與巢狀,掌握了盒子模型與它們的擺放控制,會發現再複雜的頁面也不過如此,然而,任何美好的事物都有缺憾,盒子模型有兩種不同的詮釋,一種來自 ie6,一種來自 w3c 標準瀏覽器。
在內容區外面,依次圍繞著 padding 區,border 區,margin 區,這一模型結構在所有主流瀏覽器都是一致的。
width則是元素的實際寬度,內容寬度 = width - (margin-left + margin-right + padding-left + padding-right + border-left-width + border-right-width)
元素真正的寬度 = margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right;
由此引出兩種模式:
由於歷史的原因,各個瀏覽器在對頁面的渲染上存在差異,甚至同一瀏覽器在不同版本中,對頁面的渲染也不同。在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宣告的網頁,什麼瀏覽器採用何種模式解析,這裡有一張詳細列表可參考:
3. 對於擁有doctype宣告的網頁,這裡有幾條簡單的規則可用於判斷:對於那些瀏覽器不能識別的doctype宣告,瀏覽器採用strict mode解析
4. 在doctype宣告中,沒有使用dtd宣告或者使用html4以下(不包括html4)的dtd宣告時,基本所有的瀏覽器都是使用quirks mode呈現,其他的則使用strict mode解析。
5. 可以這麼說,在現有有doctype宣告的網頁,絕大多數是採用strict mode進行解析的。
說來說去就是一句話:加上doctype宣告,讓瀏覽器使用標準模式
參考:
重新認識ie盒模型bug
說說標準——你真的了解盒子模型(box model)嗎?
關於瀏覽器盒模型小整理
瀏覽器quirksmode(怪異模式)與標準模式(再回顧下)
新部落格已移至:
瀏覽器標準模式和怪異模式
要想寫出跨瀏覽器的css,必須知道瀏覽器解析css的兩種模式 標準模式 strict mode 和怪異模式 quirks mode 所謂的標準模式是指,瀏覽器按w3c標準解析執行 怪異模式則是使用瀏覽器自己的方式解析執行 因為不同瀏覽器解析執行的方式不一樣,所以我們稱之為怪異模式。瀏覽器解析時到底使...
瀏覽器標準模式和怪異模式
現代的瀏覽器一般都有兩種渲染模式 標準模式和怪異模式,在標準模式下,瀏覽器按照html和css標準對文件進行解析和渲染 而在怪異模式下,瀏覽器則按照舊有的非標準的實現方式對文件進行解析和渲染,這樣的話,對於舊有的網頁,瀏覽器就會啟動怪異模式,就能夠使得舊網頁正常顯示 對於新的網頁,則可以啟動標準模式...
瀏覽器的怪異模式和標準模式
怪異模式是讓ie的行為更接近ie5,標準模式則是讓ie的行為更接近標準。所以想寫跨瀏覽器的css,盡量使用標準模式。解決方案就是採用doctype宣告,大多數瀏覽器採用下面的這些判斷規則 對於那些瀏覽器不能識別的doctype宣告,瀏覽器採用strict mode解析 在doctype宣告中,沒有使...