兼容性问题

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

浏览器的内核

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

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

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/

更多专业前端知识,请上 【猿2048】www.mk2048.com

浏览器兼容性问题与浏览器的内核及渲染模式相关推荐

  1. Acid: 单网页检查页面,浏览器兼容性测试,浏览器好坏的标志

    某网页在Firefox中很正常.很漂亮,但是在IE中就变得乱七八糟,这究竟是谁的问题呢?这个问题答案就是Acid. Acid是什么? 互联网中存在这各种各样的网页服务器.网页浏览器,他们往往是在不同平 ...

  2. KB001: 兼容性问题与浏览器的内核及渲染模式

    http://www.w3help.org/zh-cn/kb/001 IE 系列的"混杂模式",将浏览器的行为冻结在了 IE5.5 这个版本,虽然 IE 各版本的混杂模式也略有区别 ...

  3. 浏览器兼容性测试怎么做?系统测试工具及方案推荐

    浏览器兼容性测试怎么做?软件企业在开发软件产品的时候,不同的产品版本在不同浏览器版本上的适配性肯定有差异,难免要考虑到产品在不同设备上打开时的流畅度等因素. 而且市面上有这么多浏览器,比如IE.Fir ...

  4. css3低版本浏览器兼容性问题

    css3低版本浏览器兼容性问题 什么是浏览器兼容性问题? 浏览器内核不同,对同一段代码会有不同的解析,就会造成页面效果不统一的情况,进而造成浏览器兼容性问题. 各个浏览器内核: 浏览器类型     内 ...

  5. 浏览器兼容性—学习笔记

    浏览器兼容性 1.浏览器内核 1.1主流浏览器:拥有自主研发内核: 1.2内核: 浏览器类型 内核 JS引擎 IE Trident JScript Firefox Gecko TraceMonkey ...

  6. web前端关于浏览器兼容性

    web前端关于浏览器兼容性 所谓的浏览器兼容性问题,是指因为不同的浏览器对同一段代码有不同的解析,造成页面显示效果不统一的情况.在大多数情况下,我们的需求是,无论用户用什么浏览器来查看我们的网站或者登 ...

  7. 怎么解决浏览器兼容性问题

    怎么解决浏览器兼容性问题 所有浏览器 通用 height: 100px; IE6 专用 _height: 100px; IE6 专用 *height: 100px; IE7 专用 * height: ...

  8. 浏览器与css的兼容,CSS浏览器兼容性与解决

    一.超链接访问后hover样式不出现 1.现象描述: 同时设置了a:visited和a:hover样式,但一旦超链接点击过后,hover的样式就不再出现了. 2.解决方法: 调整样式顺序为先a:vis ...

  9. 浏览器兼容性测试(按内核分类)

    面试官:你说到有进行浏览器兼容性的测试,那么你是选择哪些浏览器进行测试,为什么这么选择呢? 我:选择市场份额较大的一些主流浏览器 面试官:不进行分类么? 我:尴尬而不失礼貌的微笑 赶紧补充了这个知识点 ...

最新文章

  1. SharePoint 2013 图文开发系列之代码定义列表
  2. Dos批处理常用命令大全入门
  3. 利用visio在软件开发中各种图
  4. easyui-textbox锁定按钮不锁定_不放水了!湖人G5改穿曼巴球衣,热火输定了,詹姆斯提前锁定FMVP!...
  5. 基于Java+Jsp+SpringMVC漫威手办商城系统设计和实现
  6. css实现发光的input输入框
  7. ReactNative组件导出
  8. ubuntu apache fastcgi 虚拟主机安装
  9. Fixjs——自定义事件处理
  10. 养成女友?我训练出了一个“杨超越”聊天机器人
  11. 学生选课管理系统c语言程序报告,学生选课管理系统c语言程序
  12. 【4G通讯模组相关】 TCPIP连接本地电脑测试 、内网穿透
  13. 【Linux】如何查看命令运行历史时间以及操作人IP
  14. 美国计算机教育方向相关的论文题目,浅谈美国大学计算机教育论文
  15. MP4/MPEG4/3GP转换软件至尊---《MP4/RM转换专家》小记
  16. 秋招—文思海辉笔试题
  17. 访问mp4出现416
  18. 基础知识-计算机网络-应用层
  19. r语言读取C盘的csv文件,R语言开发之CSV文件的读写操作实现
  20. 【codevs 2830】蓬莱山辉夜

热门文章

  1. 千元以内哪款蓝牙耳机好?2021畅销游戏蓝牙耳机推荐
  2. [summ]network traffic measurement and analysis-challenges and solutions
  3. shell 字符串转数组
  4. word修改页眉页脚一直乱动
  5. 同一栋办公楼连接的计算机网络是,在同一栋办公楼连接的计算机网络是(  )...
  6. 初三开始学计算机能够获奖吗,初三才开始学编程,还来得及NOIP拿奖吗?编程才女告诉你答案!...
  7. 云挣宝——小心网络上的陷阱
  8. 从零点五开始的深度学习笔记——VAE(Variational AutoEncoder) (二)概率角度理解VAE结构
  9. C语言---输出九九乘法表
  10. 八月十五闹中秋,嫦娥一对一直播交友源码视频聊