Quirks Mode and Standards Mode

标准模式和怪癖模式的由来

  早期的web文档主要有两种版本:   一种为navigator写的,   另一种为IE写的.   当W3C创建web标准的时候,   浏览器不能马上使用它们,   因为这样将break现存的大部分网站.   为了实现向后兼容性浏览器厂商引入了两种模式,   对早期遗留的页面和新编写的标准兼容页面采取不同渲染方式.

  现在浏览器布局引擎使用的主要有三种模式:   怪癖模式,   接近标准模式(almost standards mode)和标准模式.   

  • 怪癖模式在IE浏览器中模拟IE5下的布局,   在其他浏览器中模拟navigator 4下的布局
  • 标准模式根据HTML和CSS规范进行渲染
  • 接近标准模式只针对一小部分特性进行怪癖实现

浏览器如何决定使用哪种模式?

  对于HTML文档,   浏览器使用文档开始部分的doctype来决定渲染模式.   为了确保页面以标准模式渲染,在文档中应该准确声明doctype.   如下例子

<!DOCTYPE html>
<html>
  <head>
    <meta charset=UTF-8>
    <title>Hello World!</title>
  </head>
  <body>
  </body>
</html>

  上例中使用的<!doctype html>是最简单也是HTML5所推荐的.   早期版本的HTML标准有其他的声明,   现存的所有浏览器都会议标准模式渲染例子中的文档,   这其中包含古老的IE6.   这也就没有必要去选择其他复杂的doctype了.   如果确实需要使用其他的doctype,   可能会冒一些风险,   不恰当的使用将会触发接近标准模式或者怪癖模式.

  在声明doctype时须确保它位于HTML文档的最开始部分.   在doctype前面的任何注释或者XML声明都将在IE9及更老的版本中触发怪癖模式.

  doctype声明在HTML5中唯一的作用就是保证浏览器以标准模式渲染页面.

XHTML

  如果XHTML页面的HTTP头部Content-type设置为application/xhtml+xml那么即使不设置doctype也会始终使用标准模式.   然而由于IE8不能识别该类型,   设置为application/xhtml+xml类型将会导致IE8触发下载对话框,   直到IE9才支持xhtml.

参考:

https://developer.mozilla.org/en-US/docs/Quirks_Mode_and_Standards_Mode

http://en.wikipedia.org/wiki/Quirks_mode