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

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

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

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




1.背景介紹

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

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




2.知識剖析

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

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

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




3.常見問題

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

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

2.默認情況下,IE有一個垂直滾動條签杈,盡管當沒有東西可以滾動的時候,它是非活動狀態(tài)(遲鈍狀態(tài))铣除,在Quirks Mode下,你可以通過設(shè)置body { overflow: auto;}刪除它(當不需要它的時候)择卦,但是在標準模式下郎嫁,你仍然需要增加html { overflow: auto;}。

3.默認的浮動圖片的水平margin是3像素(而不是0)秕噪。

4.在CSS中厚宰,使用margin: 0 auto使一個塊居中是無效的。澈蝙;

5.字體屬性不會從body或其他封閉元素繼承到table中撵幽。特別是font-size。字體逗载,顏色链烈,行高也都有可能。




4.解決方案

? ? ? ?2000 年 1 月 5 日擦秽,微軟發(fā)表聲明要發(fā)布 「IE5 for Mac」漩勤。 我們先不要驚嘆 IE 居然開發(fā)過 Mac 版本, 也不要驚訝 Mac 版本的 IE2 到 IE5 存在了長達十年触幼,更不要驚呼 IE for Mac 作為 Mac 的默認瀏覽器存在了五六年的時間究飞。 以當時的眼光來說巨双,那個時候的 IE5 非常先進霉祸,它完全實現(xiàn)了當時最新的 html 標準「HTML 4.0」。但是隨之而來的問題是慢宗, 對于一些舊的網(wǎng)頁卻不能正確的呈現(xiàn)(或者說奔穿,他們是被 正確渲染了), 那些網(wǎng)頁是按照當時占統(tǒng)治地位的瀏覽器的渲染模式來渲染的缅茉,IE5 肯定不能就這樣發(fā)布男摧。

? ? ? ?微軟想到了一個解決方案,沒錯拇颅,這就是「DOCTYPE」乔询。DOCTYPE, 或者稱為 Document Type Declaration(文檔類型聲明黄锤,縮寫 DTD)食拜。通常情況下,DOCTYPE 位于一個 HTML 文檔的最前面的位置, 位于根元素 HTML 的起始標簽之前惑惶。這樣一來短纵,在瀏覽器解析 HTML 文檔正文之前就可以確定當前文檔的類型, 以決定其需要采用的渲染模式(不同的渲染 模式會影響到瀏覽器對于 CSS 代碼甚至 JavaScript 腳本的解析)鱼冀。 在寫程序時我們也會經(jīng)常遇到這樣的問題,如何保證原來的接口不變充易,又提供更強大的功能了荸型,尤其是新功能 不兼容舊功能時。 遇到這種問題時的一個常見做法 是增加參數(shù)和分支稿静,即當某個參數(shù)為真時辕狰,我們就使用新功能,而如果這個參數(shù) 不為真時悬钳, 就使用舊功能柬脸,這樣就能不破壞原 有的程序,又提供新功能灾测。




5.編碼實戰(zhàn)

? ? ? ?如果寫了DTD垦巴,就意味著這個頁面將采用對CSS支持更好的布局,這就是標準模式秦爆,而如果沒有憔披,則采用兼容之前的布局方式。這就是Quirks模式 (怪癖模式望门,詭異模式锰霜,怪異模式)〕簦總結(jié)起來,混雜模式是不符合 Web 標準的模式陶衅,準標準模式是幾乎要符合標準的模式钾唬,標準模式是符合標準的模式。 我們可以使用不同的 doctype 來激活不同的模式奕巍。


下面解釋每種doctype的意義

當 doctype 信息為:

“!DOCTYPE html”

時儒士,表明該頁面是遵守了 HTML5 規(guī)范的着撩,瀏覽器會選擇 Standards Mode,這種 doctype 是最推薦的一種拖叙,我們平時設(shè)計頁面都應(yīng)該加上這一個 doctype薯鳍。


當 doctype 信息為:

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

時,瀏覽器同樣會選擇 Standards Mode崩溪,雖然和第一種 doctype 有一些區(qū)別斩松,但是幾乎可以認為是一樣的。


當 doctype 信息為:

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

時乳幸,瀏覽器會選擇 Almost Standards Mode钧椰,需要注意的是如果今后需要把這個頁面重新改為 HTML5 規(guī)范,那么table標簽中的分割圖片問題可能會錯亂。


當 doctype 缺失(不注明秒际、寫錯)的時候,瀏覽器會選擇 Quirks Mode闽颇,這是非常不推薦的方式寄锐,我們應(yīng)該盡量避免 Quirks Mode,這對一個 web 應(yīng)用是非常不利的地方剩膘。




6.擴展思考

? ? ? ?如何查看當前的 Document Mode?

一盆顾、

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


圖 1 IE Document Mode

二贿肩、

除了從 developer tools 中查看龄寞,還有可以從 document 對象的屬性 compatMode 中獲知文檔模式,這個屬性只有兩個值 BackCompat 和 CSS1Compat溜哮,前者對應(yīng)的是 Quirks Mode 后者對應(yīng) Standards Mode色解。在 developer tools 中切換文檔模式時拍摇,頁面會自動刷新扼劈,compatMode 的值也會隨之改變蝌矛。


通過JavaScript打印一下


彈出CSS1Compat


document對象有個屬性compatMode ,它有兩個值:

BackCompat 對應(yīng)quirks mode

CSS1Compat 對應(yīng)strict mode



7.參考文獻


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

(轉(zhuǎn))瀏覽器標準模式和怪異模式之間的區(qū)別是什么隆豹?

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




8.更多討論

詳見視頻:


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


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

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

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

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

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

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

? ? ? ?PPT戳這里


感謝大家觀看剑令!

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子梭依,更是在濱河造成了極大的恐慌挣柬,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件睛挚,死亡現(xiàn)場離奇詭異,居然都是意外死亡急黎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門勃教,熙熙樓的掌柜王于貴愁眉苦臉地迎上來淤击,“玉大人,你說我怎么就攤上這事故源∥厶В” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵绳军,是天一觀的道長印机。 經(jīng)常有香客問我,道長门驾,這世上最難降的妖魔是什么射赛? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮奶是,結(jié)果婚禮上楣责,老公的妹妹穿的比我還像新娘。我一直安慰自己聂沙,他們只是感情好秆麸,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著及汉,像睡著了一般沮趣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁生,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天兔毒,我揣著相機與錄音,去河邊找鬼甸箱。 笑死育叁,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的芍殖。 我是一名探鬼主播豪嗽,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了龟梦?” 一聲冷哼從身側(cè)響起隐锭,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎计贰,沒想到半個月后钦睡,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡躁倒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年荞怒,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片秧秉。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡褐桌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出象迎,到底是詐尸還是另有隱情荧嵌,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布砾淌,位于F島的核電站啦撮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汪厨。R本人自食惡果不足惜逻族,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骄崩。 院中可真熱鬧聘鳞,春花似錦、人聲如沸要拂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽脱惰。三九已至搏嗡,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拉一,已是汗流浹背采盒。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蔚润,地道東北人磅氨。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像嫡纠,于是被迫代替她去往敵國和親烦租。 傳聞我的和親對象是個殘疾皇子延赌,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容