茅塞顿开系列——混杂模式与严格模式(CSS)

一、严格模式与混杂模式的来源

      

       当年美国网景公司生产的Netscape4和微软的IE4在实现CSS机制时并没有遵循W3C提出的标准。Netscape4提供了糟糕的支持,而IE4虽然接近标准,但依旧未能完全正确地支持标准。尽管IE5修复了许多IE4的问题,但是依然延续CSS实现中的其他故障(主要是盒模型问题)。为了保障自己的网站在各个浏览器上显示正确,网页开发者们不得不依据各个浏览器自身的规范来使用CSS,因此大部分网站的CSS实现并不符合W3C规范的标准。然而随着标准一致性越来越重要,浏览器开发商不得不面临一个艰难的抉择:逐渐追寻W3C的标准是前进的方向。但是改变现有的CSS,完全去遵循标准会使得很多旧的网站或多或少受到破坏,如果浏览器突然以正确的方式解析现存的CSS,陈旧的网站的显示必然会受到影响。所以,所有的浏览器都需要提供两种模式:混杂模式服务于旧式规则,严格模式服务于标准规则。


二、严格模式与混杂模式的区分


1、严格模式与混杂模式的定义:

严格模式(标准模式):指浏览器按照W3C标准解析代码;也即浏览器以其支持的最高标准呈现页面。

混杂模式(兼容模式,怪异模式):指浏览器用自己的方式解析代码;页面以一种比较宽松的向后兼容的方式显示。


2、Doctype(document type 文档类型的简写)

声明叫做文件类型定义(DTD),声明的作用为了告诉浏览器该文件的类型。让浏览器解析器知道应该用哪个规范来解析文档。

声明必须在 HTML 文档的第一行,这并不是一个 HTML 标签。


3、DTD(Document Type Definition)的常用声明方式:

(1)HTML4.01(3种)

严格模式包含所有 HTML 元素和属性,但不包括展示性的和弃用的元素(比如 font),不允许框架集(Framesets);过渡模式包含所有 HTML 元素和属性,包括展示性的和弃用的元素(比如 font),不允许框架集(Framesets);框架模式等同于过渡模式,但允许框架集内容。 

【1】HTML 4.01 Strict :

"http://www.w3.org/TR/html4/strict.dtd">

【2】HTML 4.01 Transitional :

 "http://www.w3.org/TR/html4/loose.dtd">

【3】HTML 4.01 Frameset :

 "http://www.w3.org/TR/html4/frameset.dtd">


(2)XHTML 1.0(4种)

【1】过渡的(Transitional)

是要求非常宽松的DTD,一般的情况下网页中会使用这个,它允许你继续使用HTML4.01的标识(但是要符合XHTML的写法)。


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" >

【2】严格的(Strict)

要求严格的DTD,对页面的标签使用非常严格,页面里几乎不准使用inline-style的CSS样式。


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" >

【3】框架的(Frameset)

专门针对框架页面设计使用的DTD,以前的Table满街走的年代很流行这种DTD,如果你的页面中包含有框架,需要采用这种DTD。


"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd" >


【4】XHTML 1.1 该 DTD 等同于 XHTML 1.0 Strict,但允许添加模型。

"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">


(3)适用于手机浏览器的

如果是移动端开发,可以用到这个。


"http://www.wapforum.org/DTD/xhtml-mobile10.dtd" >


(4)HTML5


4、如何区分严格模式和混杂模式

(1) 如果XHTML、HTML 4.01文档包含形式完整的DOCTYPE,那么它一般以标准模式呈现。
(2) 包含过渡DTD和URI的DOCTYPE也导致页面以标准模式呈现,但是有过渡DTD而没有URI会导致页面以混杂模式呈现。
(3) DOCTYPE不存在或形式不正确会导致HTML和XHTML文档以混杂模式呈现。
(4)html5既然没有DTD,也就没有严格模式与宽松模式的区别,html5有相对宽松的语法,实现时,已经尽可能大的实现了向后兼容。

5、严格模式与混杂模式的语句解析不同点:

(1 混杂模式下盒子模型的高宽包括padding和border,而W3C标准中设置一个元素的高宽指的是content的高宽;
(2)混杂模式下可以设置行内元素的高度,而标准模式下不生效;
(3)标准模式下,一个元素的高度是由其包含的内容来决定的,如果父元素没有设置高度,子元素设置一个百分比的高度无效;
(4)标准模式下使用margin:0 auto;可以使元素水平居中,但是在混杂模式下会失效;混杂模式下需要设置text-align:center;来进行水平居中;
(5)混杂模式下设置图片padding会失效;
(6)混杂模式下Table中的字体属性不能继承上层的设置;
(7)混杂模式下white-space:pre会失效。


三、JS判断浏览器当前的模式

document.write(document.compatMode == "CSS1Compat" ? "当前处于标准模式" : "当前处于混杂模式");




你可能感兴趣的:(茅塞顿开系列)