怪异模式(英语:quirks mode)是指在计算机领域中,一些网页浏览器为了维持对较旧的网页设计的向后兼容性,而使用的一种技术,有别于严格遵循万维网联盟(W3C)与互联网工程任务组(IETF)标准而设计的“标准模式”。
模式介绍
一个网页的结构与外观由两种标准化的语言的组合所描述:HTML,一种设计用于网页的置标语言,描述页面的结构与内容,和层叠样式表,一种广义的样式表(en:stylesheet) 语言,用以指定页面在不同媒介中(屏幕显示器的视觉样式,打印页面时的打印样式,页面被屏幕阅读器所阅读时的听觉样式等)该如何被渲染。然而,多数旧的网页浏览器没有完全实施这些语言的定义或者在这些定义完成之前就已被开发(比如,麦金塔 平台上的 微软 Internet Explorer 版本 5.0 发行于 2000 年,在主流网页浏览器中最早完全支持 层叠样式表 Level 1)。结果是,很多更早的网页依赖于早期浏览器不完全或不正确的解析而构造,并且只有在被这样的浏览器处理时才会如设想之中那样渲染。
主流浏览器对标准化的 HTML 和 层叠样式表 的支持已得到了显著的提高,但是旧版的文档中的很大一部分依赖于旧版浏览器的 quirks,对浏览器开发者形成了一个障碍,他们想提高它们对标准化的 HTML 及 CSS 的支持,却同样想对早期的非标准化页面保持向后兼容。此外,很多新的网页继续以旧的方式被建造出来,由于浏览器开发者所引进的兼容性解决方案意味着对标准化方法的理解并不是严格必要的。
为了与可能数量众多的网页维持兼容,现代的网页浏览器一般具有多种渲染模式:在“标准模式”(standards mode) 页面按照 HTML 与 层叠样式表 的定义渲染,而在“quirks 模式”中则尝试模拟更旧的浏览器的行为。一些浏览器(例如,那些基于 Mozilla Application Suite 的 Gecko 渲染引擎的,或者 Internet Explorer 8 在 strict mode 下)也使用一种尝试于这两者之间妥协的“近乎标准”(almost standards) 模式,实施了一种表单元格尺寸的怪异行为,除此之外符合标准定义。
差异和示例
在 quirks 模式和标准模式之间一个突出的不同是对 层叠样式表 IE盒模型缺陷的处理。在第 6 版之前,Internet Explorer 曾经使用一种决定一个元素的盒模型的宽度和高度的,与 层叠样式表 规范所指定相冲突的算法,而且由于 Internet Explorer 的流行,很多依赖于这种不正确的算法的网页被创建。而在版本 6, Internet Explorer 在标准模式下渲染时使用了 CSS 规范的算法,而在 quirks 模式下使用先前的,不规范的算法。
另一个值得一提的不同点是某些行内 (inline) 元素的垂直对齐;很多早期的浏览器对齐图片至包含它们的盒子的下边框,虽然 层叠样式表 的规范要求它们被对齐至盒内文本的基线。标准模式下,基于 Gecko 的浏览器将会对齐至基线,而在 quirks 模式下它们会对齐至底部。
此外,很多早期的浏览器对表格内部的字体样式不实施继承;结果是,字体样式必须为整个文档作为一个整体指定一次,并且为表格再次指定一次,尽管 层叠样式表 规范要求字体样式被继承进表格。如果字号使用相对单位指定,一个标准兼容的浏览器会继承基准字号,然后应用于表格内的相对字号:比如,一个声明了基准字号为 80% 的页面内声明表格为 80% (以保证在不正确继承字号的浏览器中有 80% 的字号)的字号将会,在一个标准兼容的浏览器里,显示具有 64% 字号的表格。结果是,浏览器在怪异模式典型的不对表格继承字号。