本文主要展示“HTML文档类型DTD与浏览器怪异模式的实例分析”,简单易懂,条理清晰,希望能帮你解开疑惑。让边肖带领大家学习学习《HTML文档类型DTD与浏览器怪异模式示例分析》一文。
浏览器从服务器获取网页后,会根据文档的DOCTYPE定义显示网页。如果文档中正确定义了DOCTYPE浏览器,它将进入标准模式,否则将进入怪异模式或混杂模式。
浏览器开发初期,W3C倡导的网页标准并不流行,因此浏览器对网页标签或属性有独特的分析模式。随着未来网页标准的普及,浏览器加大了对新标准(Standards Mode)的支持,但并没有放弃与原有模式(Quirks mode)的兼容,这是浏览器各种表达模式的来源。
当微软开始开发兼容标准的浏览器时,他们希望确保向后兼容。为了实现这一点,他们在IE6.0之后的版本在浏览器中嵌入了两种呈现模式:标准模式(标准模式或严格模式)和怪癖模式(怪异模式或兼容模式)。在标准模式下,浏览器根据W3C规范显示页面;在怪异模式下,页面会以IE5甚至IE4显示页面的方式显示,从而保持之前的网页正常显示。
这两种模式造成的最大问题就是盒子模式,或者说现在大家都忽略了IE5的存在。然而IE以怪异模式运行的盒子模式在最新版本的IE中依然存在,甚至在IE6—IE10中也有很多模式可供开发者使用。事实上,为了保持与大量可能的网页的兼容性,现代网络浏览器通常有多种呈现模式:在“标准模式”下,根据HTML和CSS的定义呈现页面,而在“怪癖模式”下,尝试模拟旧浏览器的行为。一些浏览器(例如基于Mozilla Gecko渲染引擎的浏览器,或者是严格模式下的Internet Explorer 8)也使用了“近乎标准”的模式,试图在两者之间进行妥协,实现表格单元格大小的奇怪行为,否则符合W3C标准定义。
IE盒模型缺陷
(InternetExplorer box模型bug)指的是IE早期版本中调整网页元素大小的方法,与W3C推荐的级联样式表(CSS)语言的标准方法不同。在IE6中,浏览器支持一种可选的渲染模式(称为“标准兼容模式”),可以解决这种差异。但出于向后兼容的原因,IE的所有版本(最多IE 9和IE 10开发者预览版)默认仍处于正常和非标准模式。Mac的Internet Explorerfor不受这种非标准行为的影响。此外,Internet Explorer 10还将其消费者预览版中的默认怪异模式更改为类似于非IE浏览器的怪异模式,更符合规范。
模式之间的差异和示例
《怪癖》和《标准》之间的大部分差异可以归为IE5和IE6之间的差异。
Quirks模式和标准模式的一个突出区别就是对CSS IE盒子模型缺陷的处理。在第6版之前,InternetExplorer使用一种算法来确定元素的框模型的宽度和高度,这与CSS规范相冲突。此外,由于Internet Explorer的普及,许多依赖于这种不正确算法的网页被创建。然而,在版本6中,Internet Explorer在标准模式下渲染时使用了CSS标准算法,而在怪癖模式下使用了以前的非标准算法。
另一个值得一提的区别是一些内联元素的垂直对齐;许多早期的浏览器将图片与包含图片的框的下边框对齐,尽管CSS规范要求图片与框中文本的基线对齐。在标准模式下,基于壁虎的浏览器将与基线对齐,而在古怪模式下,它们将与底部对齐。
此外,许多早期的浏览器没有继承表格中的字体样式;因此,字体样式必须为整个文档指定一次,为表格指定一次,尽管CSS规范要求字体样式继承到表格中。如果以相对单位指定字体大小,标准兼容浏览器将继承基准字体大小,然后将其应用于表格中的相对字体大小:例如,声明基准字体大小为80%的页面声明表格大小为80%(以确保浏览器中有80%的字体大小不正确地继承字体大小),将在标准兼容浏览器中显示64%字体大小的表格。因此,浏览器通常不会从怪异模式的表格中继承字体大小。
IE6 IE7在诡异模式下,盒子型号完全一样n
bsp; 即width=width
IE6 IE7 在标准模式下 盒模型也是一模一样的即width=width+padding+border
代码实例http://bbs.blueidea.com/thread-2839403-1-1.html
在strict mode中 :
width是内容宽度,也就是说,元素真正的宽度 = margin-left + border-left-width + padding-left + width +padding-right + border-right-width + margin-right;
在quirks mode中 :
width则是元素的实际宽度,内容宽度 = width - (margin-left +margin-right + padding-left + padding-right + border-left-width +border-right-width)
怪异模式CSS上区别《Quirks mode and strict mode》
javascript上的区别
以下是一些重要的不同点:
1)盒模型的高宽包含内边距padding和边框border
在W3C标准中,如果设置一个元素的宽度和高度,指的是元素内容的宽度和高度,而在IE5.5及以下的浏览器及其他版本的Quirks模式下,IE的宽度和高度还包含了padding和border。
2)可以设置行内元素的高宽
在Standards模式下,给span等行内元素设置wdith和height都不会生效,而在quirks模式下,则会生效。
3)可设置百分比的高度
在standards模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置高度,子元素设置一个百分比的高度是无效的。
4)用margin:0 auto设置水平居中在IE下会失效
使用margin:0 auto在standards模式下可以使元素水平居中,但在quirks模式下却会失效,quirk模式下的解决办法,用text-align属性:
body{text-align:center};#content{text-align:left}
5)quirk模式下设置图片的padding会失效
6)quirk模式下Table中的字体属性不能继承上层的设置
7)quirk模式下white-space:pre会失效
接近标准模式
根据 CSS2 的规范维持了“传统的”表单元格的垂直方向大小调整的叫做“接近标准模式”(almoststandards mode) 或者“严格模式”(strictmode) 的第三种兼容性模式,已被在这些浏览器中实施:Safari, Opera 7.5 (和以上), 所有基于 Gecko (自 1.0.1) 的浏览器(比如 Firefox)和 Internet Explorer 8。
“接近标准”模式的渲染和“标准”模式除了一点之外,在所有细节上相匹配。表单元格内部图片的布局采用和“quirks”模式相同的方式被处理,而不是按照标准,这点和例如 Internet Explorer 7 (以及更早)的旧版 (en) 浏览器相当一致。这意味着使用表格内图像片的布局在“quirks”或“接近标准”模式下的浏览器中,比起“标准”模式下,更不至于分崩离析。
触发不同渲染模式
DOCTYPE,简称为DTD,是英文DocumentType Definition的缩写,中文“文档类型”
DOCTYPE标签是单独出现的
说明:
文档类型,会使浏览器使用相应标准加载网页并显示
文档类型定义在HTML文档的第一行,在html标签之前
文档不定义DOCTYPE,浏览器将无法获知HTML或XHTML文档的类型,因此会进入混乱模式。
通常,浏览器基于页面中文件类型描述DTD的存在以决定采用哪种渲染模式;如果存在一个完整的 DOCTYPE 则浏览器将会采用标准模式,而如果它缺失则浏览器将会采用怪异模式。例如,一个以如下 DOCTYPE 开始的网页将会触发标准模式:
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
如下 DOCTYPE 语法上是无效的,因为它包含公共标识符关键字 PUBLIC 却没有公共标识符(指示所用 HTML 版本的名称),也没有 HTML 文档类型定义的系统标识符 URL。这将会触发怪异模式:
<!DOCTYPE html PUBLIC>
此外,一个不含任何DOCTYPE 的网页将会以 quirks 模式渲染。
对此一个值得一提的例外是微软的 Internet Explorer 6 浏览器,如果 DOCTYPE 之前有一个 XML 声明,不管是否指定完整的DOCTYPE,它就会以 quirks 模式渲染一个页面。因此以如下代码开始的 XHTML 页面会被 IE 6 渲染为 quirks 模式:
<?xml version="1.0"encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
在一定程度上,上述代码是有用的,然而它仅仅会对 IE 6 触发怪异模式。
如果 DOCTYPE 之前有任何语句,quirks 模式在任何版本的 IE 中(截至 IE 9)同样会被触发。例如,如果一个超文本文件在 DOCTYPE 前包含一个注释或者任何标签,IE (截至 9) 会使用 quirks 模式:
<!-- This comment will put IE 6, 7, 8,and 9 in quirks mode -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
XML 声明的问题在Internet Explorer 7 中被解决了,在此 XML 声明只是简单的被忽略。然而,为对现存和更早的网页浏览器的最大程度的兼容,万维网联盟,维持 XML 规范的组织,建议 XHTML文件的作者可以考虑省略XML 声明。
JavaScript中的区别
Quirks mode的Table of measurements
点击打开链接
MSDN
DOM中的document有一个属性叫compatMode,其返回值是BackCompat和CSS1Compat,分别对应quirks mode和strict mode。
function detectMode(){
varmode=document.compatMode;
if(mode="BackCompat")
alert("当前以quirks mode的方式渲染页面");
elseif(mode="CSS1Compat")
alert("当前已strict mode的方式渲染页面");
elsealert("浏览器版本不支持compatMode");
}
IE8以前的版本compatMode只取决于DocType,IE8+不建议使用compatMode判断,而建议使用documentMode,http://msdn.microsoft.com/en-US/library/cc196988.aspx
常用的浏览器表现模式
IE
IE包括两种模式:标准模式(Standards Mode)与怪异模式或混杂模式(Quirks mode)。
简称为IE(S)与IE(Q)
FireFox
FIreFox包括三种模式:Full Standards Mode、Almost Standards Mode与Quirks Mode。对这三种模式的描述见:Mozilla's DOCTYPE sniffing
Opera
Opera包括三种模式:Quirks、Standards与Almost Standards。对这三种模式的描述见:DOCTYPE Switches supportin Opera
当没有使用DTD声明或者使用HTML4以下(不包括HTML4)的DTD声明时,基本所有的浏览器都是使用Quirks Mode呈现。
文档类型的比较
Henri Sivonen 编译了一个不同文档类型以及在最常见的浏览器中它们被如何对待的清单,展示了这些情况下,页面是否被渲染为怪异 (Q),标准 (S) 或接近标准 (A) 模式。接近标准模式的判定标准是非标准的表单元格高度的渲染。这个表格应用于Content-Type 为 text/html 的内容。Content-Type 为 application/xhtml+xml 的内容在 Chrome, Firefox, InternetExplorer 9 (以及 10), Safari和 Opera 被渲染为标准模式。Internet Explorer 6, 7 和 8 不支持 application/xhtml+xml 的 Content-Type。
Doctype |
NS6 |
Mozilla0.9.5-1.0 |
IE 8+ |
IE 7 |
IE 6 |
Mac IE 5 |
Konq 3.2 |
|||
*** |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
|||
HTML 3.2 |
||||||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
|||
HTML 4.01 |
||||||||||
Strict |
有系统标识符 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
||
无系统标识符 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
Q |
A |
|||
Transitional |
有系统标识符 |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
Q |
||
无系统标识符 |
Q |
Q |
Q |
Q |
Q |
Q |
Q |
|||
HTML5 |
||||||||||
<!DOCTYPE html> |
Q |
{`text`} S |
{`text`} S |
A |
A |
A |
? |
|||
XHTML Basic |
||||||||||
有系统标识符且无 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
|||
XHTML 1.0 |
||||||||||
Strict |
有系统标识符和 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
Q |
A |
Q |
||
有系统标识符且无 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
|||
无系统标识符,也无 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
A |
? |
|||
Transitional |
有系统标识符且有 XML 声明 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
{`text`} S |
{`text`} S |
A |
A |
Q |
A |
Q |
||
有系统标识符,无 XML 声明 |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
Q |
|||
无系统标识符,无 XML 声明 |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
? |
|||
XHTML 1.1 |
||||||||||
有系统标识符和 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
Q |
A |
Q |
|||
有系统标识符,无 XML 声明 |
{`text`} S |
{`text`} S |
{`text`} S |
A |
A |
A |
A |
|||
Doctype |
NS6 |
Mozilla0.9.5-1.0 |
IE 8+ |
IE 7 |
IE 6 |
Mac IE 5 |
Konq 3.2 |
模式验证
在绝大多数浏览器,文档对象模型的扩展 document.compatMode 指示当前页面的渲染模式。在标准模式和接近标准模式,document.compatMode 包含值 CSS1Compat,然而在怪异模式该值为 BackCompat。
此外,在 MozillaFirefox 和 Opera 一个给定页面的渲染模式也被指示在“页面信息”的信息框中。而在Internet Explorer 8 及更高版本的 IE 中,文档模式被显示于Internet Explorer开发人员工具中,且可以被用户更改。在 Internet Explorer 中还有 document.documentMode 的私有 JavaScript 扩展,其取值为 5, 7, 8, 9, 10 之一的浮点型变量。
以上是“HTML文档类型DTD与浏览器怪异模式的示例分析”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/114456.html