严格模式与混杂模式——如何触发这两种模式,区分它们有何意义

来源:互联网 发布:嵌入式linux系统下载 编辑:程序博客网 时间:2024/06/09 13:49

1)如何触发两种模式:
加入xml头部声明,可以触发IE浏览器的Quirks mode,触发之后,浏览器解析方式就和IE5.5一样,拥有IE5.5一样的bug和其他问题,行为(Javascript)也是如此。
          

(2)IE6的触发:在XHTML的DOCTYPE前加入XML声明,
<?xmlversion="1.0" encoding="utf-8"?>

<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

(3)IE7的触发:在XML声明和XHTML的DOCTYPE之间,加入HTML注释 
<?xmlversion="1.0" encoding="utf-8"?>

<!-- ... andkeep IE7 in quirks mode -->
<!DOCTYPE htmlPUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

(4)IE6和IE7都可以触发的:在HTML4.01的DOCTYPE文档头部,加入HTML注释
<!-- quirks mode-->  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""http://www.w3.org/TR/html4/strict.dtd">


(5)在页面顶部加 <!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN"> ,将触发“怪异模式”

(6)没有使用DTD声明或者使用HTML4以下(不包括HTML4)的DTD声明时,基本上所有的浏览器都是使用quirks mode呈现

如何判定现在是标准模式,还是怪异模式:

方法如下,执行代码
alert(window.top.document.compatMode);

//BackCompat  表示怪异模式
//CSS1Compat 
表示标准模式

意义:

各个浏览器的混杂模式,基本就是各个浏览器的私有模式,不相互兼容。
所以,除非是为了兼容的问题,比如你不想修改很久很久以前做的IE ONLY的网页,否则,刻意触发混杂模式没有任何意义。

区分是标准模式还是混合模式,有其重要的意义所在,那就是确定页面解析时,使用的是“标准盒Box模型“,还是使用“传统Box模型“。

mozillafirefox IE中的BOX模型

其解释中,因不一致导致相差2px的宽度,其解决方法:
div{

   margin:30px!important;
   margin:28px;
}
注意这两个margin的顺序一定不能写反,!important这个属性IE6不能识别,但IE7能识别,且IE8属于标准浏览器类型;故也支持。别的浏览器可以识别。所以在IE6下其实解释成这样:
div{

  margin:30px;
  margin:28px
}
重复定义的话按照最后一个来执行。

IE5
IE6BOX解释不一致

IE5
下div{width:300px;margin:010px 0 10px;}
div
的宽度会被解释为300px-10px(右填充)-10px(左填充),最终div的宽度为280px,

而在IE6和其他浏览器上,div宽度则是以300px+10px(右填充)+10px(左填充)=320px来计算的。

这时我们可以做如下修改
div{

   width:300px!important; 
    width /**/:340px;
   margin:0 10px 0 10px

}

0 0