浏览器模式:怪异和严格模式
怪异模式和严格模式(一般称为标准模式:standard Mode)是浏览器解析CSS时的两种“模式”。
备注:一个网页一般由两部分组成,即:HTML和CSS,HTML负责描述网页的结构和内容(如标题、导航栏等),而CSS则负责网页的表现(外观,如:背景颜色、字体样式等)。
问题的产生:
当Netscape4和IE4实现CSS机制时,并未遵循W3C提出的标准。Netscape提供了糟糕的支持,而IE4虽接近标准,但依旧未能完全正确的支持标准。尽管IE5修复了IE4许多问题,单依然延续CSS实现中的其他故障(主要是盒子模型--BOX Model问题)。
为保证自己的网站在不同浏览器中都能正确展现,网页开发者不得不依据各浏览器自身的规范来使用CSS。因此大部分网站的CSS实现并未符合W3C的标准。
随着标准一致性变得越来越重要,浏览器开发商不得不面临一个艰难的抉择:逐渐遵循W3C的标准是前进的方向。但是改变现有的CSS实现,完整去遵循标准,会是许多网站或多或少受到破坏。如果浏览器突然以正确的方式解析现存的CSS,陈旧的网站显示必然受到影响。
因此,立即遵循标准会产生问题,然后忽略标准则又会维持浏览器大战时所产生的混乱。
解决方案:
任何的解决方案必须跟随如下两个方面:
1、允许网站开发者能够选择他们所熟知的模式
2、依然使用旧式规则显示陈旧的网站
即,所有浏览器需提供两种模式:怪异模式(兼容模式)服务于旧式规则,严格模式服务于标准规则。Mac平台的IE浏览器最先实现这两种模式,Mozilla、Safari、Opera和Window平台的IE6也相继实现了这两种模式。Window平台的IE5和Netscape4则只提供了怪异模式。
选择使用哪种模式需一个触发器,而“DOCTYPE切换”则用于此目的。依照标准,任何一个(X)HTML文档必须拥有一个DOCTYPE(是一组机器可读的规则,它们指示(X)HTML文档中允许有什么,不允许有什么,DOCTYPE正是用来告诉浏览器使用哪种DTD,一般放在(X)HTML文档开头)用以告诉其他人这个文档的类型风格。
1、产生于标准化浪潮以前的网页并没有DOCTYPE声明。因此,“没有DOCTYPE”意味着触发怪异模式:依据旧式的CSS规则渲染网页。
2、如开发者明确知道包含DOCTYPE,他们应该明白他们想要怎么做。因此,大部分的DOCTYPE声明将触发严格模式:依据标准的CSS规则渲染网页。
3、任何新的或未知的DOCTYPE将触发严格模式
4、一些页面依据怪异模式而写,但是却包含DOCTYPE。这种情况下各个浏览器依据自己的DOCTYPE规则列表来触发怪异模式。
注意:你的网页并不一定依据所选择的DOCTYPE去获得有效验证,一个DOCTYPE标签足以触发严格模式。
我在大部分网页中使用如下的DOCTYPE。它除了声明我的网页时XHMTL1.0过度类型外,还将在所有浏览器中触发“准严格模式”
<!DOCTYPE htmlPUBLIC "-//W3c//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml1-transitional.dtd">
完美的解决方案?
就个人而言,我并不十分满意“DOCTYPE切换”方案。一个DOCTYPE所提供的信息是(X)HTML文档所拥有的类型风格,即文档的结构,而不应该提供任何关于文档表现的信息,因为那违反了CSS关于页面结构和表现分离的原则。
并发症:准严格模式
在早些时候,尝试使用严格模式总是会产生关于图片会突然获得旧式的底部边距,并且无法移除的讨论。产生这个现象的原因是严格模式将“怪异模式和严格模式”标签当成行内元素,着意味着一些空间将被保留给一些拥有“尾部”的字符(如:g、j、q),而图片并没有“尾部”字符,所以这些空间将不会被使用,但是却依旧保留着。
解决方法:声明图片为块级元素{display:block}
浏览器厂商,尤其时Mozilla,认为这是一种产生困惑的情况,于是他们引入“准严格模式”,这与严格模式一样,除了将图片当做块级元素而不是行内元素。
Windows平台IE的特殊性:XML声明
在Windows平台的IE6浏览器中,微软实现了一个额外的规则:如果DOCTYPE声明在XML声明之后,将触发怪异模式。这样做是为允许开发者在怪异模式下获得“有效的网页”(需要DOCTYPE)。下面是XML声明,需将它放在页面的开头,在DOCTYPE之前。
浙公网安备 33010602011771号