`
kino
  • 浏览: 104652 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

浏览器的两种模式quirks mode 和strict mode

阅读更多

在看js代码时,有时会看到关于quirks mode(怪异模式)和strict mode(严格格式)的东西,一直也没深究怎么回事,只是零零碎碎的有些概念,最近终于受不了这种似懂非懂的感觉,决定好好学习总结一下。

1、quirks mode和strict mode是浏览器解析css的两种模式,或者可以称之为解析方法。目前正在使用的浏览器这两种模式都支持

2、历史原因。

当早期的浏览器Netscape 4和Explorer 4对css进行解析时,并未遵守W3C标准,这时的解析方式就被我们称之为quirks mode(怪异模式),但随着W3C的标准越来越重要,众多的浏览器开始依照W3C标准解析CSS,仿照W3C标准解析CSS的模式我们叫做strict mode(严格模式).


3、后来的浏览器虽然支持strict mode,但众多浏览器并未放弃支持quirks mode。

一个重要的原因就是为了之前大量在quirks mode下开发的网页能够得到正确的显示。所以,这些支持两种模式的浏览器当拿到一张网页时,所做的一个前期工作就是判断采取何种方式进行解析(判断条件后面会说)。注:Explorer 5仍然只支持quirks mode



4、浏览器如何判断何用哪种方式解析CSS?

解决方案就是采用doctype声明,大多数浏览器采用下面的这些判断规则

  •     浏览器要使老旧的网页正常工作,但这部分网页是没有doctype声明的,所以浏览器对没有doctype声明的网页采用quirks mode解析。
  •     对于拥有doctype声明的网页,什么浏览器采用何种模式解析,这里有一张详细列表可参考:http://hsivonen.iki.fi/doctype/
  •     对于拥有doctype声明的网页,这里有几条简单的规则可用于判断:

对于那些浏览器不能识别的doctype声明,浏览器采用strict mode解析

 

在doctype声明中,没有使用DTD声明或者使用HTML4以下(不包括HTML4)的DTD声明时,基本所有的浏览器都是使用quirks mode呈现,其他的则使用strict mode解析。


可以这么说,在现有有doctype声明的网页,绝大多数是采用strict mode进行解析的。


在ie6中,如果在doctype声明前有一个xml声明(比如:<?xml version="1.0" encoding="iso-8859-1"?>),则采用quirks mode解析。这条规则在ie7中已经移除了。


5、mozilla提出了almost strict moede ,和strict mode的区别是:

img元素在strict中是inline的,而在almost strict mode中是block的。其实我们前面所说,在大多数浏览器,大多数doctype声明触发的是almost strict mode;


6、quirks mode和strict mode最大的不同就是提现在对盒模式的解释上 ,这也是我们在js里要注意的地方。


什么是盒模式? 这是针对块级元素说的,我这里只简单说一下(详情请查阅相关资料)。说白了就是把块级元素想像成一个装东西的盒子,而margin,padding,border,width这些css属性构成了盒模式。

 

而区别就是产生在width属性上:


strict mode中

width是内容宽度 ,也就是说,元素真正的宽度 = 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)


这里把盒模式相关的东西记录一下,备忘


·内联元素 ,例如<a>、<span>等,定义上下边界不会影响到行高(line-height),内联元素距离上一行元素的距离由行高决定,而不是填充或边界。 注2.  内联元素(display: inline) 内联元素不需要在新行内显示,而且也不强迫其后的元素换行,如a、em、span等都为内联元素。内联元素可以为任何其他元素的子元素。

·浮动元素(无论左或者右浮动)边界不压缩 ,且若浮动元素不声明宽度,则其宽度趋向于0,即压缩到其内容能承受的最小宽度。

·如果盒中没有内容,则即使定义了宽度和高度都为100%,实际上只占0% ,因此不会被显示,此点在采取层布局的时候需特别注意。

·边界值可为负,其显示效果各浏览器可能不相同

·填充值不可为负

·边框默认的样式(border-style)为不显示(none)


7、在quirks mode 和 strict mode中还有一个区别 ,但没经过验证,我只是发现有这个现象。

strict mode 中,

table的css属性font-size会继承父级元素的 ,也就是说,table中的字体大小会继承父级元素字体的大小。

quirks mode 中,

table的css属性font-size不会继承父级元素的 ,需要专门设置一下。也就是说,table中的字体大小不会继承父级元素字体的大小。


8、在js中如何判断当前浏览器正在以何种方式解析?
    document对象有个属性compatMode ,它有两个值:
        BackCompat    对应quirks mode
        CSS1Compat    对应strict mode

9、我们在编写跨浏览器兼容性的js代码时,常用到的判断代码(来源于ext)

	var ua = navigator.userAgent.toLowerCase();
        var client = {
        isStrict:   document.compatMode == 'CSS1Compat',
        isOpera:    ua.indexOf('opera') > -1,
        isIE:       ua.indexOf('msie') > -1,
        isIE7:      ua.indexOf('msie 7') > -1,
        isSafari:   /webkit|khtml/.test(ua),
        isWindows:  ua.indexOf('windows') != -1 || ua.indexOf('win32') != -1,
        isMac:      ua.indexOf('macintosh') != -1 || ua.indexOf('mac os x') != -1,
        isLinux:    ua.indexOf('linux') != -1
        };
        client.isBorderBox = client.isIE && !client.isStrict;
        client.isSafari3 = client.isSafari && !!(document.evaluate);
        client.isGecko = ua.indexOf('gecko') != -1 && !client.isSafari;

        /**
         * You're not sill using IE6 are you?
         */
        var ltIE7 = client.isIE && !client.isIE7;
 




10、废话 :我不知道现在的很多js框架为什么还对解析模式进行了判断。我认为这些框架肯定是给现在要开发的项目使用的,那应该都是strict mode才对呀?是不是因为还有很多人不习惯给页面加上doctype声明呢?

 

 

本文地址:http://kino.iteye.com/blog/241260 ,转载请注明,谢谢!

分享到:
评论
4 楼 jimylion 2011-09-08  
esay 写道
esay 写道

好文章,受益匪浅啊!以前碰到很多奇怪的问题,现在终于豁然开朗,谢谢你9527!

补充一下,第七点,确实如楼主所说。在quirks mode 中,table的css属性不会去继承父节点的,我试了一下style="font-size:30px; color:red; font-weight:bold;"都是如此,其它属性未没有验证,我的是IE7


在webkit浏览器中td的font-size属性会继承table中font-size的默认大小,设置table的font-size无效,是否遇到同样的问题呢?
3 楼 luolonghao 2009-02-03  
不错!做跨浏览器开发肯定都会碰得到。

同样的strict mode下IE和Gecko系列浏览器表现不一样,尤其是上面提到的table td的font。
2 楼 esay 2009-02-03  
esay 写道

好文章,受益匪浅啊!以前碰到很多奇怪的问题,现在终于豁然开朗,谢谢你9527!

补充一下,第七点,确实如楼主所说。在quirks mode 中,table的css属性不会去继承父节点的,我试了一下style="font-size:30px; color:red; font-weight:bold;"都是如此,其它属性未没有验证,我的是IE7
1 楼 esay 2009-02-03  
好文章,受益匪浅啊!以前碰到很多奇怪的问题,现在终于豁然开朗,谢谢你9527!

相关推荐

    RuoYi-Vue3(1).zip

    RuoYi-Vue3(1).zip

    multisim 仿真ADS8322仿真

    multisim 仿真ADS8322仿真

    guanyu.html

    guanyu

    《系统分析和设计》课程作业-面向中国各大城市的医院预约挂号系统.zip

    《系统分析和设计》课程作业——面向中国各大城市的医院预约挂号系统.zip

    初学Java时花费12天做的一款小游戏.zip

    冲刺 初学Java时花费12天做的一款小游戏.zip

    Access函数中文最新版本

    本文档详细的介绍了Access的一些函数;感兴趣的朋友可以过来看看

    [net毕业设计]ASP.NET教务管理平台-权限及公共模块设计与开发(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    基于Simulink的三相逆变器用于电机驱动系统.docx

    基于Simulink的三相逆变器用于电机驱动系统

    sons.vue

    sons

    [net毕业设计]asp.net考勤管理系统设计(源代码+论文).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    Postgresql数据库常用命令中文最新版本

    psql 是一个以终端为基础的 PostgreSQL 前端。它允许你交互地键入查询,把它们发出给 PostgreSQL, 然后看看查询的结果。另外,输入可以来自一个文件。还有, 它提供了一些元命令和多种类 shell 地特性来实现书写脚本以及对大量任务的自动化。感兴趣的朋友可以过来看看

    DVD播放机:2023年全球DVD播放机行业收入达4.79亿美元,潜力无限

    DVD播放机行业:2023年全球DVD播放机行业收入高达4.79亿美元,潜力无限 在数字流媒体技术日新月异的今天,DVD播放机这一传统影音设备似乎已被时代遗忘。然而,事实并非如此。尽管流媒体服务如雨后春笋般涌现,但DVD播放机在全球市场依然保有庞大的存量规模,尤其在特定消费人群和特定需求领域中,其地位依然稳固。那么,在这个看似饱和的市场中,DVD播放机行业又将如何寻找新的增长点?专业咨询将成为您破局的关键。 市场概况: DVD播放机行业作为消费电子产业的重要组成部分,一直受到国家政策的鼓励和支持。近年来,随着《产业结构调整指导目录》、《超高清视频产业发展行动计划》等政策的出台,我国的制造创新与消费升级得到了有效推动,为DVD播放机行业的发展带来了广阔的市场空间。据统计,2023年度中国消费电子产品市场规模达到1.92万亿元,而全球DVD播放机行业收入也高达4.79亿美元。尽管数字流媒体的发展对传统DVD光盘影音播放造成了冲击,但在特定的市场环境及应用场景下,DVD光盘仍然拥有较大的消费基础。特别是便携式DVD播放机市场,在经过流媒体冲击后,近几年逐步趋于稳定,并在保有更大规模的存量市场

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    消防气压给水设备和稳压泵安装 分项工程质量验收记录表.docx

    ASP+ACCESS教师档案管理系统(源代码+论文)(源代码+论文+说明文档).zip

    【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

    SD模块创建销售订单时,不检查物料的产品组

    此配置可实现不同产品组的物料使用同一个销售范围的订单类型

    MPU-6000/MPU-6050运动传感技术规格及应用解析

    内容概要:MPU-6000/6050 是一种集成了3轴陀螺仪和3轴加速度计的高性能集成运动处理单元 (MPU)。其采用 InvenSense 独特的 MotionFusion 技术,提供了强大的实时姿态识别和动作捕捉功能。文档详细描述了这两种产品的电气规格、设计参数和使用细节。特别是针对陀螺仪和加速度计的工作原理、分辨率、工作范围、功耗管理等技术要点做了详细介绍,并涵盖了 SPI 接口(仅 MPU-6000 支持)以及辅助 I²C 总线连接外部传感器的方法。同时,还提到了 ESD 处理和焊接规范等方面的内容,确保了在工业生产和应用中的稳定性和可靠性。 适用人群:电子工程师、硬件设计师及相关领域研究人员。 使用场景及目标:主要应用于智能手机、平板电脑、游戏控制器以及其他需要精准运动检测的设备。该产品旨在提升设备的动作感应精度,优化用户体验的同时降低成本。 其他说明:文档还包括详细的测试和认证流程,帮助用户更好地理解和评估该组件的实际性能,适合用于新产品的设计验证和技术调研。

    前端工程化实践课程下载

    视频课程下载——前端工程化实践

    全国月尺度相对湿度-Rhu-1961-2022-025x025

    全国月尺度相对湿度数据集(1961-2022, 0.25° × 0.25°)是一个高分辨率的网格化相对湿度数据集,覆盖了中国大陆及周边地区。 该数据集通过科学方法整合气象观测和再分析数据,为气候研究、生态模型、农业生产、以及水资源管理等领域提供了重要支持。 数据下载后可显示详细信息。

    SimSun.ttf 字体库下载simsun.ttf

    SimSun.ttf 字体库下载 simsun字体是系统中必备的字体,其实很多朋友不知道simsun字体就是宋体,如果系统中没有这个字体的话,那么很多文字排版啥的都不太好看了。下载本站提供的simsun字体即可解决~

    jingdian.html

    jingdian

Global site tag (gtag.js) - Google Analytics