quirks模式是什么?它和standards模式有什么區(qū)別

大家好,我是IT修真院深圳分院第01期學(xué)員,一枚正直善良的web程序員。

今天給大家分享一下,修真院官網(wǎng) CSS任務(wù)中可能會(huì)使用到的知識(shí)點(diǎn):

quirks模式是什么?它和standards模式有什么區(qū)別?




1.背景介紹

? ? ? ?什么是 Quirks Mode? 簡(jiǎn)單來說,Quirks Mode 就是瀏覽器為了兼容很早之前針對(duì)舊版本瀏覽器設(shè)計(jì)、并未嚴(yán)格遵循 W3C 標(biāo)準(zhǔn)的網(wǎng)頁而產(chǎn)生的一種頁面渲染模式

? ? ? ?Quirks Mode是一種瀏覽器(像IE,F(xiàn)irefox,Opera)操作模式。 從根本上說,怪異模式(也稱之為兼容模式)意味著一個(gè)相對(duì)新的瀏覽器故意模擬許多在舊瀏覽器中存在的bug,特別是在IE4和IE5中。




2.知識(shí)剖析

? ? ? ?Quirks Mode是由文檔類型探查法觸發(fā)。也就是大家熟知的文檔類型切換。這意味著瀏覽器檢查一個(gè)HTML文檔的開始,看它是否包含一個(gè)HTML規(guī)范所要求的文檔類型聲明。

? ? ? ?Quirks Mode的目標(biāo)是使舊頁面顯示出他們的作者想要的那樣。舊頁面可能利用舊瀏覽器已知的特性寫成,或者至少是適應(yīng)舊瀏覽器。

? ? ? ?Quirks Mode是什么沒有權(quán)威的規(guī)范。畢竟,實(shí)質(zhì)上Quirk Mode是一個(gè)故意違反CSS和HTML的規(guī)范。




3.常見問題

現(xiàn)代瀏覽器在Quirks Mode下,頁面會(huì)發(fā)生哪些變化,怎么樣去避免

1.在Quirks Mode下,為body設(shè)置一個(gè)margin是無效的。

2.默認(rèn)情況下,IE有一個(gè)垂直滾動(dòng)條,盡管當(dāng)沒有東西可以滾動(dòng)的時(shí)候,它是非活動(dòng)狀態(tài)(遲鈍狀態(tài)),在Quirks Mode下,你可以通過設(shè)置body { overflow: auto;}刪除它(當(dāng)不需要它的時(shí)候),但是在標(biāo)準(zhǔn)模式下,你仍然需要增加html { overflow: auto;}。

3.默認(rèn)的浮動(dòng)圖片的水平margin是3像素(而不是0)。

4.在CSS中,使用margin: 0 auto使一個(gè)塊居中是無效的。;

5.字體屬性不會(huì)從body或其他封閉元素繼承到table中。特別是font-size。字體,顏色,行高也都有可能。




4.解決方案

? ? ? ?2000 年 1 月 5 日,微軟發(fā)表聲明要發(fā)布 「IE5 for Mac」。 我們先不要驚嘆 IE 居然開發(fā)過 Mac 版本, 也不要驚訝 Mac 版本的 IE2 到 IE5 存在了長(zhǎng)達(dá)十年,更不要驚呼 IE for Mac 作為 Mac 的默認(rèn)瀏覽器存在了五六年的時(shí)間。 以當(dāng)時(shí)的眼光來說,那個(gè)時(shí)候的 IE5 非常先進(jìn),它完全實(shí)現(xiàn)了當(dāng)時(shí)最新的 html 標(biāo)準(zhǔn)「HTML 4.0」。但是隨之而來的問題是, 對(duì)于一些舊的網(wǎng)頁卻不能正確的呈現(xiàn)(或者說,他們是被 正確渲染了), 那些網(wǎng)頁是按照當(dāng)時(shí)占統(tǒng)治地位的瀏覽器的渲染模式來渲染的,IE5 肯定不能就這樣發(fā)布。

? ? ? ?微軟想到了一個(gè)解決方案,沒錯(cuò),這就是「DOCTYPE」。DOCTYPE, 或者稱為 Document Type Declaration(文檔類型聲明,縮寫 DTD)。通常情況下,DOCTYPE 位于一個(gè) HTML 文檔的最前面的位置, 位于根元素 HTML 的起始標(biāo)簽之前。這樣一來,在瀏覽器解析 HTML 文檔正文之前就可以確定當(dāng)前文檔的類型, 以決定其需要采用的渲染模式(不同的渲染 模式會(huì)影響到瀏覽器對(duì)于 CSS 代碼甚至 JavaScript 腳本的解析)。 在寫程序時(shí)我們也會(huì)經(jīng)常遇到這樣的問題,如何保證原來的接口不變,又提供更強(qiáng)大的功能了,尤其是新功能 不兼容舊功能時(shí)。 遇到這種問題時(shí)的一個(gè)常見做法 是增加參數(shù)和分支,即當(dāng)某個(gè)參數(shù)為真時(shí),我們就使用新功能,而如果這個(gè)參數(shù) 不為真時(shí), 就使用舊功能,這樣就能不破壞原 有的程序,又提供新功能。




5.編碼實(shí)戰(zhàn)

? ? ? ?如果寫了DTD,就意味著這個(gè)頁面將采用對(duì)CSS支持更好的布局,這就是標(biāo)準(zhǔn)模式,而如果沒有,則采用兼容之前的布局方式。這就是Quirks模式 (怪癖模式,詭異模式,怪異模式)??偨Y(jié)起來,混雜模式是不符合 Web 標(biāo)準(zhǔn)的模式,準(zhǔn)標(biāo)準(zhǔn)模式是幾乎要符合標(biāo)準(zhǔn)的模式,標(biāo)準(zhǔn)模式是符合標(biāo)準(zhǔn)的模式。 我們可以使用不同的 doctype 來激活不同的模式。


下面解釋每種doctype的意義

當(dāng) doctype 信息為:

“!DOCTYPE html”

時(shí),表明該頁面是遵守了 HTML5 規(guī)范的,瀏覽器會(huì)選擇 Standards Mode,這種 doctype 是最推薦的一種,我們平時(shí)設(shè)計(jì)頁面都應(yīng)該加上這一個(gè) doctype。


當(dāng) doctype 信息為:

“!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"”

時(shí),瀏覽器同樣會(huì)選擇 Standards Mode,雖然和第一種 doctype 有一些區(qū)別,但是幾乎可以認(rèn)為是一樣的。


當(dāng) doctype 信息為:

“!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"”

時(shí),瀏覽器會(huì)選擇 Almost Standards Mode,需要注意的是如果今后需要把這個(gè)頁面重新改為 HTML5 規(guī)范,那么table標(biāo)簽中的分割圖片問題可能會(huì)錯(cuò)亂。


當(dāng) doctype 缺失(不注明、寫錯(cuò))的時(shí)候,瀏覽器會(huì)選擇 Quirks Mode,這是非常不推薦的方式,我們應(yīng)該盡量避免 Quirks Mode,這對(duì)一個(gè) web 應(yīng)用是非常不利的地方。




6.擴(kuò)展思考

? ? ? ?如何查看當(dāng)前的 Document Mode?

一、

IE 中,用戶可以在 developer tools 中切換模式,如圖 1 所示,IE10 的六種文檔模式都被顯示在 Document Mode 菜單下,用戶可以直接選擇。


圖 1 IE Document Mode

二、

除了從 developer tools 中查看,還有可以從 document 對(duì)象的屬性 compatMode 中獲知文檔模式,這個(gè)屬性只有兩個(gè)值 BackCompat 和 CSS1Compat,前者對(duì)應(yīng)的是 Quirks Mode 后者對(duì)應(yīng) Standards Mode。在 developer tools 中切換文檔模式時(shí),頁面會(huì)自動(dòng)刷新,compatMode 的值也會(huì)隨之改變。


通過JavaScript打印一下


彈出CSS1Compat


document對(duì)象有個(gè)屬性compatMode ,它有兩個(gè)值:

BackCompat 對(duì)應(yīng)quirks mode

CSS1Compat 對(duì)應(yīng)strict mode



7.參考文獻(xiàn)


(轉(zhuǎn))Quirks模式與standards模式區(qū)別

(轉(zhuǎn))瀏覽器標(biāo)準(zhǔn)模式和怪異模式之間的區(qū)別是什么?

(轉(zhuǎn))怪異模式(Quirks Mode)對(duì) HTML 頁面的影響




8.更多討論

詳見視頻:


quirks模式是什么?它和standards模式有什么區(qū)別_騰訊視頻


問:為什么不推薦使用Quirks Mode?

答:因?yàn)镼uirks Mode的存在是為了適應(yīng)那些祖?zhèn)鱳eb代碼,現(xiàn)代web開發(fā)中,除非是有特殊的需求,如兼容低版本瀏覽器(IE)等才會(huì)開啟怪異模式;

問:Quirks Mode中發(fā)生了什么?

答:瀏覽將改變自身的渲染機(jī)制,代碼加載的模式將會(huì)發(fā)生不可思議的轉(zhuǎn)變;

問:Quirks 和 Standards 之外還有什么模式?

答:上文已經(jīng)提到了,除了Quirks 和 Standards 之外還有一種類似Standards的模式,還有一種混合模式Almost Standards Mode;

? ? ? ?PPT戳這里


感謝大家觀看!

今天的分享就到這里啦,歡迎大家點(diǎn)贊、轉(zhuǎn)發(fā)、留言、拍磚~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容