标准模式和怪癖模式的由来
早期的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