浏览器兼容性问题之渲染模式——1

兼容性问题

目前市面上流行的浏览器有多种,这些浏览器在处理一个相同的页面时,表现或行为有时会有差异。这种差异可能很小,甚至不会被注意到;也可能很大,甚至造成在某个浏览器下无法正常浏览。我们把引起这些差异的问题统称为“浏览器兼容性问题”。

浏览器的内核

各品牌浏览器的内核是不同的,不同的内核处理同一段代码的时候思路不同。因此可以说,浏览器间内核的差异是产生兼容性问题的根本原因。

“内核”也称为“引擎”。常见的浏览器及其渲染引擎(又称排版引擎)、脚本引擎的列表如下:

Browser Name Layout Engine ECMAScript Engine
Internet Explorer 6 - 8 Trident JScript
Firefox 3.5 Gecko TraceMonkey
Chrome 4 WebKit V8
Safari 4 WebKit SquirrelFish Extreme
Opera 10 Presto Carakan

注:关于浏览器内核的更多信息,请参考 维基百科 - 排版引擎 及 维基百科 - 网页浏览器比较 中的相关内容。

浏览器的工作模式

工作模式简介

浏览器的工作模式常被称为“渲染模式”。实际上浏览器不同的工作模式不仅对渲染有影响,对代码的解析以及脚本的行为也同样有影响。

从更广泛的角度来看,浏览器的工作模式的差异不仅体现在处理 HTML 页面的时候,处理 XML 及一些非 WEB 内容时也有模式上的差异,但本文仅讨论浏览器在处理 HTML 页面时工作模式。

注:关于浏览器的工作模式的更多信息,请参考 Activating Browser Modes with Doctype

工作模式的来源及变迁

微软于 2001 年 8 月 27 日发布的 IE6(Internet Explorer 6)增强了对 CSS1 的兼容,这使得 IE6 对 CSS 的解析及渲染与它的前一个版本 IE5.5 有了很大的差别,如对盒模型的理解、表格尺寸的算法等。

为了保持良好的向后兼容性,微软为用户提供了一个“开关”,来决定浏览器的工作模式,这个“开关”就是页面顶部的 DTD。
某些 DTD 将使 IE6 工作在“标准兼容模式”(即“标准模式”),这种模式使用了 IE6 最新的处理方式,包括对 CSS1 的兼容及一些 DHTML 方面的增强。
而另一些 DTD,包括不设置 DTD 将使 IE6 工作在“向后兼容模式”(即“混杂模式”),这种模式对页面的处理是与 IE5.5 保持一致的,这样就可以保证对一些在 IE5.5 中表现良好的页面在 IE6 中也能达到同样的效果。
微软在后续推出的 IE7、IE8 中,也使用了上述“开关”,与 IE6 一样,在 IE7、IE8 的“混杂模式”下,对页面处理方式仍与 IE5.5 一致。因此可以说,IE 系列的“混杂模式”,将浏览器的行为冻结在了 IE5.5 这个版本,虽然 IE 各版本的混杂模式也略有区别,但它们的本意都是向后兼容。

随着时间的推进和标准的进步,IE6、IE7 的“标准模式”逐渐已经变得不够标准了,2009年3月19日发布的 IE8 重新定义了“标准模式”,再次增强了对标准规范的支持,同时为了保持对 IE7 的兼容,IE8 增加了一种工作模式:“接近标准模式”。于是,IE8 的工作模式就分成了三种:“标准模式”、“接近标准模式”和“混杂模式”。

目前所有主流浏览器对于向后兼容问题的处理都与 IE 系列一样,提供了不同的模式来保证向后兼容。

浏览器的工作模式就是在这种背景下诞生的,它很好的解决了浏览器对标准支持上的不断增强及对一些错误的修复而导致的向后兼容问题,但也将浏览器在不同情况下的表现及行为变得更加复杂多样。

通过以上的内容,我们可以得出结论:如果一个页面能使各浏览器都工作在“标准模式”下,那么各浏览器都将尽量兼容标准,因此各浏览器之间表现出的差异是很少的。相反,如果一个页面使各浏览器都工作在“混杂模式”下,那么各浏览器都将尽量向后兼容,因此各浏览器之间表现出的差异将会最大化。

注:

  1. 关于 IE6 的更多信息,请参考 维基百科 - Internet Explorer 6
  2. 关于此问题,请参考 W3H - RD8001: 各浏览器中 ‘width‘ 和 ‘height‘ 在某些元素上的作用位置有差异
  3. 关于此问题,请参考 W3H - RE8017: IE Firefox Opera 的混杂模式对于 TD 元素的百分比高度计算错误
  4. 关于 IE6 对浏览器工作模式的区分的详细信息,请参考 MSDN - CSS Enhancements in Internet Explorer 6
  5. 比如 IE6 的混杂模式有著名的“双边距 Bug”,而 IE7 和 IE8 的混杂模式则没有这个问题。
    关于此问题,请参考 W3H - RX2001: IE5.0 IE5.5 IE6 中浮动元素在某些情况下会有双倍外边距
  6. document.compatMode 最先出现在 IE6 中,它的值标示了浏览器的工作模式,“标准模式”返回“CSS1Compat”,“混杂模式”返回“BackCompat”。这一做法到目前为止仍被所有主流浏览器所采用。
    需要注意的是:在后来出现的“接近标准模式”中,document.compatMode 的返回值与“标准模式”一致,为“CSS1Compat”。也就是说,不能通过 document.compatMode 来详细区分浏览器的工作模式,只能用来判断浏览器是否工作在“混杂模式”下。
    因为“标准模式”与“接近标准模式”之间的差异并不大,所以这个方法至今仍被广泛使用。
  7. 关于 Firefox 中 DTD 与浏览器工作模式的详细信息,请参考 Mozilla‘s DOCTYPE sniffing,关于 Opera 中 DTD 与浏览器工作模式的详细信息,请参考 DOCTYPE Switches support in Opera Presto 2.6

建议

在编写一个页面时,要使用可以触发各浏览器“标准模式”的DTD,并书写符合规范的代码,以保证您的页面在各浏览器中可以最大程度的兼容。

原文来自:http://www.w3help.org/zh-cn/

时间: 2024-10-10 09:28:10

浏览器兼容性问题之渲染模式——1的相关文章

IE浏览器兼容性模式

最近支持公司的一个内部业务管理系统,系统是基于jQuery来实现:用了2年的MVVM框架的我转向这个完全使用jQuery框架来开发的系统,真是相当不爽(相信用过MVVM框架的跟我是相同的感受):更为憋屈的是,到了这个年代,IE的亲爹微软都放弃支持IE6-10了,系统尽然还只支持使用IE浏览器(运营电脑安装都是IE8浏览器,所以大部分只管IE8),其他高级浏览器不被支持(当然这是由于系统使用了基于IE的一些插件导致). 但是话又说回来,但是在支持系统的开发过程中,经常看到X-UA-Compatib

浏览器内核及渲染模式的介绍

首先要引入一个概念——排版引擎(Layout Engine,Rendering Engine),就是经常上网的人也许都听说过的浏览器内核,负责解析网页语法(如HTML.JavaScript)并渲染.展示网页.各品牌浏览器的内核是不同的,不同的内核处理同一段代码的时候思路不同.因此可以说,浏览器间内核的差异是产生兼容性问题的根本原因.这就是我们苦逼前端工程师们经常希望浏览器大一统的原因了.当然这只是个梦,那好我们回归现实,下面我将对四种常用的浏览器内核进行简单的介绍.  Trident      

深入理解浏览器兼容性模式

摘要:关于各种浏览器模式,网上已经有许多文档和资料了,但是很少有能够完全将几个概念阐述清楚的.大部分的资料稍显过时,有些内容可能已经不再适用了.本文中笔者将尽可能将几个概念阐述清楚,并去掉一些过时的内容,仅保留必要的干货. 想必你一定知道浏览器有个标准(Standards)模式和一个怪异(Quirks)模式,或许你还听说过有个"准标准(Almost Standards)"模式.而当你打开Internet Explorer的时候,又看到了什么浏览器模式.文档模式,还有什么兼容性视图等等.

浏览器的渲染模式

浏览器渲染模式分为2种,一种是 怪癖模式[Quirksmode] 和 标准模式 [Standars mode]. 怪癖模式和标准模式有几点比较重要的区别: 1.声明上,当页面没有!doctype声明或者!doctype声明中没有HTML4以上(包含HTML4)的DTD声明,则页面以quirks mode渲染,其他情况则以sdandars mode渲染. 2.怪癖模式和标准模式在盒模型上有很大的区别 怪癖模式: 盒模型的宽度=margin-left  + width  + margin-right

常见的浏览器兼容性问题大汇总

常见的浏览器兼容性问题大汇总 1 ie6.0横向margin加倍 产生因素:块属性.float.有横向margin. 解决方法:display:inline: 2 ie6.0下默认有行高 解决方法:overflow:hidden;或font-size:0;或line-height:xx px: 3 在各个浏览器下img有空隙(原因是:回车.) 解决方法:让图片浮动. 4 一个父标签与几个子标签嵌套,父标签不浮动,子标签float,子标签不撑开父的高度. 解决方法:a 在子标签最后清浮动{<div

浏览器兼容性问题汇总

# 浏览器兼容性问题汇总 ## 问题1 ### first-child ## <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> div p:first-child { color: red; } </style> </head> <

企业内网IE浏览器兼容性支持和加速方法

修改IE浏览器配置加速IE浏览器: 取消"对证书地址不匹配发出警告"勾选取消"检查服务器证书是否已吊销*"勾选取消"检查提交的POST重定向到不允许发送到的区域时发出警告"勾选取消"在安全和非安全模式之间切换时发出警告"勾选取消"检查发行商的证书是否吊销"勾选取消“允许运行和安装程序,即使签名无效”勾选取消"检查下载的程序的签名"勾选取消"启动弹出窗口阻止程序"勾选关

CSS3与页面布局学习笔记(八)——浏览器兼容性问题与前端性能优化方案

一.浏览器兼容 1.1.概要 世界上没有任何一个浏览器是一样的,同样的代码在不一样的浏览器上运行就存在兼容性问题.不同浏览器其内核亦不尽相同,相同内核的版本不同,相同版本的内核浏览器品牌不一样,各种运行平台还存在差异.屏幕分辨率不一样,大小不一样,比例不一样.兼容性主要可以分类为: 1).CSS兼容2).JavaScript兼容3).HTML兼容 这三类也是前端的主要组成部分,都存在一定的兼容性问题,知己知彼,百战百胜,我们先了解浏览器的发动机—内核. 多年前我们一直为IE6兼容烦恼,为它没少加

那些年我们经常遇到的浏览器兼容性问题

阅读目录 1. Web标准以及W3C 2. 主流浏览器内核 3. 标准模式(Standards Mode)和怪异模式(Quirks Mode) 4. CSS盒模型 5. 重置浏览器样式 6. HTML语义化 7. CSS选择器的优先级 8. 双外边距浮动问题 9. 3像素问题 10. IE6不支持min-* 11. IE6不支持png-24透明图片 12. IE6不能定义1px左右宽度的容器 13. IE5~8不支持opacity 14. Firefox点击链接出现的虚线框 15. 外边距叠加