首先我们应该要了解为什么会有多种浏览器模式——其实这是个历史遗留问题,在浏览器大战时期,网景浏览器(Netscape Navigator)和微软的IE浏览器(Microsoft Internet Explorer)对网页分别有不同的实现方式,那个时候的网页要针对这两种浏览器分别开发不同的版本。而到了 W3C 制定标准之后,这些浏览器就不能继续使用这种页面了,因而会导致大部分现有站点都不能使用。基于这个原因,浏览器才引入两种模式来处理一些遗留的站点。
现在的浏览器排版引擎支持三种模式:怪异(Quirks)模式、准标准(AlmosStandards)和标准(Standards)模式。在怪异模式中,排版引擎会模拟 网景4 和 Windows 中的 IE5 的行为;在完全标准的模式中,会尽量执行 HTML 和 CSS 规范所指定的行为;而在准标准模式中,则只包含很少的一部分怪异模式中的行为。
官方定义:
- 怪异(Quirks)模式:为了避免“破损”那些按照在20世纪90年代末风行的实践创作的页面,浏览器违背了现代的Web格局规范。不合的浏览器实现了不合的怪癖行动。IE6、7和8中,怪癖模式有效地冻结在IE5.5 。其他浏览器中,怪癖模式是标准模式的少量偏移。
- 准标准(AlmosStandards)模式: 它遵守传统的做法来实现表格单位格的垂直尺寸而不是严格的遵守CSS2规范,更接近Mozilla的准标准模式而不是Mozilla的标准模式。
- 标准(Standards)模式:浏览器按W3C标准规范解析执行代码.....
什么是DTD?
DTD——即DOCTYPE,或者称为 Document Type Declaration(文档类型声明,缩写DTD)通常情况下,DOCTYPE 位于一个 HTML文档的最前面的位置,位于根元素HTML的起始标签之前。这样一来,在浏览器解析 HTML 文档正文之前就可以确定当前文档的类型,以决定其需要采用的渲染模式(不同的渲染模式会影响到浏览器对于 CSS 代码甚至 JavaScript 脚本的解析)。XHTML1.0提供了三种DOCTYPE可选择:1、过渡型(Transitional )2、严格型(Strict )3、框架型(Frameset )。
触发三种模式的格式
- 标准模式
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!-- 严格履行 -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><!-- 兼容XHTML放弃的标签 -->
- 准标准模式
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
- 怪异模式
第一行不写,或写错DOCTYPE就能触发
三种模式下的表现差异:
首先,怪癖模式是不可取的,因为其没有兼容性可言。在IE(IE6-IE9)中,混杂模式使用IE5.5内核来解析并渲染页面。
其次,准标准
模式是在尽可能遵循标准的基础上兼容部分非标准代码,比如一些已经弃用的标签等。
最后,标准模式则是对统一标准实现最好的模式,它要求标
签必须闭合(唯一不需要闭合的就是DOCTYPE标签),不能使用已经废弃的标签等等。目前,使用最多的DOCTYPE声明为过渡型HTML或
XHTML,因为它能最大话的兼容一些老代码。不过,技术领先的公司(比如google、facebook、twitter等都如此)都已经使用了html5的
DOCTYPE声明,即<!DOCTYPE html>,它所触发的模式与严格型HTML或严格型XHTML所触发的模式完全相同,但好处是节省代码且向前兼
容(HTML5时代)。