quirks mode对网站的影响-网站错版的可能
1、很多站长可能会接到用户反馈,网站突然变形了,变得七镇胆严呢零八落。怎么找都找不出原因。不知道为什么。这一切都是quirks模式在作怪。比如本站,在之前没有声明quirks模式。结果产生了错版。在此之前,粘贴一下百科里边对于quirks模式的解释QuirksMode概述定义什么是QuirksMode?简单来说,QuirksMode就是浏览器为了兼容很早之前针对旧版本浏览器设计、并未严格遵循W3C标准的网页而产生的一种页面渲染模式。QuirksMode有两种如果我们将IE升级到最新的IE10就会发现IE10除了拥有IE7/8/9/10StandardsMode四种StandardsMode,同样还有拥有了两种QuirksMode:IE5Quirks和IE10Quirks。随着IE10发布而产生的这个新的怪异模式IE10Quirks被认为是一种更好的支持了HTML5规范的QuirksMode。我们可以发现针对HTML5规范而设计的页面(如含有<audio>、<video>、<canvas>等标签)在IE5Quirks下是不能正确显示的,但是在IE10Quirks下完全可以正确显示。也就是说,IE10Quirks是为了在那些针对HTML5设计,但是又没有添加doctype(可以决定浏览器工作在哪种模式下,后面会详细讨论)的页面而存在的。如何查看DocumentModeIE中,用户可以在developertools中切换模式,如图1所示,IE10的六种文档模式都被显示在DocumentMode菜单下,用户可以直接选择,下一章的Demo我们都采用IE10(version:10.0.9200.16576)作为测试浏览器
2、图1IEDocumentMode除了从developertools中查看,还有可以从document对象的属佣甲昭宠性compatMode中获知文档模式,这个属性只有两个值BackCompat和CSS1Compat,前者对应的是QuirksMode后者对应StandardsMode。在developertools中切换文档模式时,页面会自动刷新,compatMode的值也会随之改变。浏览器如何判断文档类型?上一节中我们知道IE用户可以在developertools中改变文档模式。那么,如果用户没有自己选择,浏览器在准备解析、绘制一个页面的时候,它是如何决定文档模式的呢?实际上浏览器在渲染页面之前会检查两个内容,一个是页面是否有doctype信息,另外一个是页面是否有x-ua-compatible信息。Doctype检测对于一个HTML页面,<!DOCTYP>声明位于其中最前面的位置,处于<html>标签之前,这个<!DOCTYP>可以告知浏览器使用哪种HTML规范,针对每种规范浏览器同样也会选择对应的文档模式。平时最常见的三种doctype信息对应的文档模式如下。·当doctype信息如下时,表明该页面是遵守了HTML5规范的,浏览器会选择StandardsMode,这种doctype是最推荐的一种,我们平时设计页面都应该加上这一个doctype。<!DOCTYPEhtml>·当doctype如下时,浏览器同样会选择StandardsMode,虽然和第一种doctype有一些区别,但是几乎可以认为是一样的。<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01//EN""http://www.w3.org/TR/html4/strict.dtd">·当doctype如下时,浏览器会选择AlmostStandardsMode,需要注意的是如果今后需要把这个页面改为HTML5规范,那么上文讨论的<table>中的分割图片问题可能会错乱。<!DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
3、·当doctype缺失的时候,浏览器会选择QuirksMode,这是非常不推荐的方式,我们应该尽量避免QuirksMode,这对一个web应用是非常不利的地方。解决办法在首页加上metatag,告知我们需要使用的IE模式<metahttp-equiv="x-ua-compatible"content="IE=edge">加上Chrome=1我在网络上搜索的时候,发现有些人会在最后面加上Chrome=1,变成:<metahttp-equiv="x-ua-compatible"content="IE=edge,chrome=1">好奇的去搜索了一下,发现到StackOverflow也有人问了相同问题,才发现原来Chrome有一个IEAddon叫做ChromeFrame,而作用就是在IE内使用Chrome来显示页面,这样老旧的IE就可以浏览一些新的页面也不出问题,而那个Chrome=1就表示如果有装,就启用。