`
zhangfei821024
  • 浏览: 26735 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

浏览器的标准模式与怪异模式

阅读更多
标准模式与怪异模式:

本文来自CSDN博客:http://blog.csdn.net/tang_123_/archive/2010/11/02/5983067.aspx

       由于历史的原因,各个浏览器在对页面的渲染上存在差异,甚至同一浏览器在不同版本中,对页面的渲染也不同。在W3C标准出台以前,浏览器在对页面的渲染上没有统一规范,产生了差异(Quirks mode或者称为Compatibility Mode);由于W3C标准的推出,浏览器渲染页面有了统一的标准(CSScompat或称为Strict mode也有叫做Standars mode),这就是二者最简单的区别。

    W3C标准推出以后,浏览器都开始采纳新标准,但存在一个问题就是如何保证旧的网页还能继续浏览,在标准出来以前,很多页面都是根据旧的渲染方法编写的,如果用的标准来渲染,将导致页面显示异常。为保持浏览器渲染的兼容性,使以前的页面能够正常浏览,浏览器都保留了旧的渲染方法(如:微软的IE)。这样浏览器渲染上就产生了Quircks mode和Standars mode,两种渲染方法共存在一个浏览器上。
   

火狐一直工作在标准模式下,但IE(6,7,8)标准模式与怪异模式差别很大,主要体现在对盒子模型的解释上,这个很重要,下面就重点说这个。

那么浏览器究竟该采用哪种模式渲染呢?这就引出的DTD,既是网页的头部声明,浏览器会通过识别DTD而采用相对应的渲染模式:

1. 浏览器要使老旧的网页正常工作,但这部分网页是没有doctype声明的,所以浏览器对没有doctype声明的网页采用quirks mode解析。
2. 对于拥有doctype声明的网页,什么浏览器采用何种模式解析,这里有一张详细列表可参考:http://hsivonen.iki.fi/doctype/
3. 对于拥有doctype声明的网页,这里有几条简单的规则可用于判断:对于那些浏览器不能识别的doctype声明,浏览器采用strict mode解析
4. 在doctype声明中,没有使用DTD声明或者使用HTML4以下(不包括HTML4)的DTD声明时,基本所有的浏览器都是使用quirks mode呈现,其他的则使用strict mode解析。
5. 可以这么说,在现有有doctype声明的网页,绝大多数是采用strict mode进行解析的。
6. 在ie6中,如果在doctype声明前有一个xml声明(比如:<?xml version="1.0" encoding="iso-8859-1"?>),则采用quirks mode解析。这条规则在ie7中已经移除了。

如何设置为怪异模式:

方法一:在页面项部加 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

我们用Eclipse的HTML模板新建的html页面,自动就有上面东东

方法二:什么也不加。

这里有一张详细列表可参考:http://hsivonen.iki.fi/doctype/

如何设置为标准模式:

加入以下任意一种:

HTML4提供了三种DOCTYPE可选择:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">  


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">


XHTML1.0提供了三种DOCTYPE可选择:

(1)过渡型(Transitional )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

(2)严格型(Strict )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

(3)框架型(Frameset )
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

这里有一张详细列表可参考:http://hsivonen.iki.fi/doctype/

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

方法一:执行以下代码

alert(window.top.document.compatMode) ;

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

方法二:jquery为我们提供的方法,如下:
alert($.boxModel)
alert($.support.boxModel)

IE6,7,8浏览器的标准模式还是怪异模式 盒子模型的 差异

(由于火狐的始终表现的很一致,不种我们操心。所以这里我们重点说IE浏览器)





-------------------------------------------------模态窗口----------------------------------------------------

我们想做一个DIV蒙层,中间放一个iframe,做一个像模态窗口的dialog工具

思路如下:

取出页面 网页可见区域 的宽与高, 进行蒙层,

通过CSS的固定定位属性{position:fixed}来实现,可以让HTML元素脱离文档流固定在浏览器的某个位置,

这样拖动滚动条时, 蒙层不会移动,一直在中心位置。

中心位置放一个iframe,用来显示其它网页,并可以提交表单。

可以用以下代码计算 蒙层的宽与高:

Js代码
//计算窗口的高宽和滚动条的位置   
alert(window.top.document.compatMode) ;//区分怪异模式或标准模式   
var cw = window.top.document.compatMode == "BackCompat" ?window.top.document.body.clientWidth:window.top.document.documentElement.clientWidth;//窗体高度   
var ch = window.top.document.compatMode == "BackCompat" ?window.top.document.body.clientHeight:window.top.document.documentElement.clientHeight;//窗体宽度//必须考虑文本框处于页面边缘处,控件显示不全的问题   
var sw = Math.max(window.top.document.documentElement.scrollLeft, window.top.document.body.scrollLeft);//横向滚动条位置   
var sh = Math.max(window.top.document.documentElement.scrollTop, window.top.document.body.scrollTop);//纵向滚动条位置//考虑滚动的情况            
alert("cw:"+cw+"  ch:"+ch+"  sw:"+sw+"  sh"+sh);  
//计算窗口的高宽和滚动条的位置
alert(window.top.document.compatMode) ;//区分怪异模式或标准模式
var cw = window.top.document.compatMode == "BackCompat" ?window.top.document.body.clientWidth:window.top.document.documentElement.clientWidth;//窗体高度
var ch = window.top.document.compatMode == "BackCompat" ?window.top.document.body.clientHeight:window.top.document.documentElement.clientHeight;//窗体宽度//必须考虑文本框处于页面边缘处,控件显示不全的问题
var sw = Math.max(window.top.document.documentElement.scrollLeft, window.top.document.body.scrollLeft);//横向滚动条位置
var sh = Math.max(window.top.document.documentElement.scrollTop, window.top.document.body.scrollTop);//纵向滚动条位置//考虑滚动的情况        
alert("cw:"+cw+"  ch:"+ch+"  sw:"+sw+"  sh"+sh);----------------------------------------------参考 1-----------------------------------------------------

我们先来认识一下有哪些属性可以使用:

scrollLeft:设置或获取位于对象左边界和窗口中目前可见内容的最左端之间的距离
scrollTop:设置或获取位于对象最顶端和窗口中可见内容的最顶端之间的距离
scrollWidth:获取对象的滚动宽度
scrollHeight: 获取对象的滚动高度。

obj.offsetTop 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算上侧位置,整型,单位像素。
obj.offsetLeft 指 obj 相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置,整型,单位像素。
obj.offsetWidth 指 obj 控件自身的绝对宽度,不包括因 overflow 而未显示的部分,也就是其实际占据的宽度,整型,单位像素。
obj.offsetHeight 指 obj 控件自身的绝对高度,不包括因 overflow 而未显示的部分,也就是其实际占据的高度,整型,单位像素

event.clientX 相对文档的水平座标
event.clientY 相对文档的垂直座标
event.offsetX 相对容器的水平坐标
event.offsetY 相对容器的垂直坐标

clientWidth  内容可视区域的宽度
clientHeight 内容可视区域的高度
clientTop    内容可视区域相对容器的垂直坐标
clientLeft   内容可视区域相对容器的水平坐标

参考图片:




----------------------------------------------参考 2-----------------------------------------------------

Js代码
var Width_1=document.body.scrollWidth;    //body滚动条总宽     
var Height_1=document.body.scrollHeight;  //body滚动条总高     
     
var Width_2=document.documentElement.scrollWidth;    //documentElement滚动条总宽   
var Height_2=document.documentElement.scrollHeight;  //documentElement滚动条总宽      
  
//------------------------------   
var Width_3=document.body.clientWidth;   //body网页可见区域宽,滚动条隐藏部分不算        
var Height_3=document.body.clientHeight; //body网页可见区域高,滚动条隐藏部分不算     
     
var Width_4=document.documentElement.clientWidth;   //documentElement网页可见区域宽,滚动条隐藏部分不算      
var Height_4=document.documentElement.clientHeight; //documentElement网页可见区域高,滚动条隐藏部分不算    
  
//------------------------------   
var Width_5=window.screen.availWidth;  //屏幕可用工作区宽度(用处不大)      
var Height_5=window.screen.availHeight;//屏幕可用工作区高度      
  
//------------------------------   
var scrollLeft_7=window.top.document.body.scrollLeft;//body水平滚动条位置    
var scrollTop_7=window.top.document.body.scrollTop;//body垂直滚动条位置   
  
var scrollLeft_8=window.top.document.documentElement.scrollLeft;//documentElement水平滚动条位置   
var scrollTop_8=window.top.document.documentElement.scrollTop;//documentElement垂直滚动条位置   
     
alert(" body滚动条总宽:"+Width_1+",body滚动条总高:"+Height_1+      
    ",\n documentElement滚动条总宽:"+Width_2+",documentElement滚动条总高:"+Height_2+     
    ",\n"+    
    "\n body网页可见区域宽:"+Width_3+",body网页可见区域高:"+Height_3+      
    ",\n documentElement网页可见区域宽:"+ Width_4+",documentElement网页可见区域高:"+Height_4+   
    ",\n"+      
    "\n 屏幕可用工作区宽度:"+Width_5+", 屏幕可用工作区高度:"+Height_5+   
    ",\n"+   
    "\n body水平滚动条位置:"+scrollLeft_7+",body垂直滚动条位置:"+scrollTop_7+   
    ",\n documentElement水平滚动条位置:"+scrollLeft_8+",documentElement垂直滚动条位置:"+scrollTop_8   
);            
var Width_1=document.body.scrollWidth;    //body滚动条总宽 
var Height_1=document.body.scrollHeight;  //body滚动条总高 
 
var Width_2=document.documentElement.scrollWidth;    //documentElement滚动条总宽
var Height_2=document.documentElement.scrollHeight;  //documentElement滚动条总宽  

//------------------------------
var Width_3=document.body.clientWidth;   //body网页可见区域宽,滚动条隐藏部分不算    
var Height_3=document.body.clientHeight; //body网页可见区域高,滚动条隐藏部分不算 
 
var Width_4=document.documentElement.clientWidth;   //documentElement网页可见区域宽,滚动条隐藏部分不算  
var Height_4=document.documentElement.clientHeight; //documentElement网页可见区域高,滚动条隐藏部分不算

//------------------------------
var Width_5=window.screen.availWidth;  //屏幕可用工作区宽度(用处不大)  
var Height_5=window.screen.availHeight;//屏幕可用工作区高度  

//------------------------------
var scrollLeft_7=window.top.document.body.scrollLeft;//body水平滚动条位置
var scrollTop_7=window.top.document.body.scrollTop;//body垂直滚动条位置

var scrollLeft_8=window.top.document.documentElement.scrollLeft;//documentElement水平滚动条位置
var scrollTop_8=window.top.document.documentElement.scrollTop;//documentElement垂直滚动条位置
 
alert(" body滚动条总宽:"+Width_1+",body滚动条总高:"+Height_1+  
    ",\n documentElement滚动条总宽:"+Width_2+",documentElement滚动条总高:"+Height_2+ 
",\n"+
    "\n body网页可见区域宽:"+Width_3+",body网页可见区域高:"+Height_3+  
    ",\n documentElement网页可见区域宽:"+ Width_4+",documentElement网页可见区域高:"+Height_4+
",\n"+  
    "\n 屏幕可用工作区宽度:"+Width_5+", 屏幕可用工作区高度:"+Height_5+
",\n"+
"\n body水平滚动条位置:"+scrollLeft_7+",body垂直滚动条位置:"+scrollTop_7+
",\n documentElement水平滚动条位置:"+scrollLeft_8+",documentElement垂直滚动条位置:"+scrollTop_8
);  

(需要提一下:CSS中的margin属性,与clientWidth、offsetWidth、clientHeight、offsetHeight均无关)


下面是从w3school查到的,说的不是很详细


根节点
有两种特殊的文档属性可用来访问根节点:

document.documentElement
document.body
第一个属性可返回存在于 XML 以及 HTML 文档中的文档根节点。

第二个属性是对 HTML 页面的特殊扩展,提供了对 <body> 标签的直接访问。

http://www.w3school.com.cn/htmldom/dom_nodes_access.asp

收集整理于互联网

参考:

http://cavonchen.iteye.com/blog/738423

http://hsivonen.iki.fi/doctype/



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tang_123_/archive/2010/11/02/5983067.aspx
分享到:
评论

相关推荐

    浅谈浏览器兼容性模式[按F12便知]

    面试官:请你谈谈标准(Standards)模式、怪异(Quirks)模式、准标准(Almost Standards)模式,当你打开IE9时候会看见,浏览器模式,文档模式,兼容性视图,这些又是什么? 好吧,一点点来:先明白一个词DTD(文档类型...

    CSS基础知识

    资源名称:CSS基础知识内容简介:0、基础知识1、CSS概述2、CSS基础语法3、CSS选择器4、CSS主要属性5、CSS核心机制-盒子模型6、CSS重点和难点-定位7、综合示例浏览器模式 当浏览器厂商开始创建于标准兼容的浏览器时...

    javascript严格模式详解(含严格模式与非严格模式的区别)

    严格模式与非严格模式的区别 1.禁用with语法,使用将报错 因为解析with语法时作用域的情况会非常复杂,严重影响代码的解析与运行速度 function usualMode() { with({a: 1}) { console.log(a) } } usalMode() /...

    quirksmode

    浏览器Quirksmode(怪异模式)与CSS1compat.docx

    高级前端工程师面试题整理1

    4. 实现不使用 border 画出1px高的线,在不同浏览器的标准模式与怪异模式下都能保持一致的效果 2. CSS3有哪些新特性 5. canvas 如何绘制

    js判断浏览器是否支持严格模式的方法

    “严格模式”体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。 另一方面,同样的代码,在”严格模式”中,可能会有不一样的运行结果...

    fee-interview-questions:前端面试题库

    浏览器标准模式和怪异模式之间的区别是什么? 标准模式会以标准模式解释页面,怪癖模式则以兼容模式解释老的页面。 说说HTML5有那些新特性,移除了哪些元素? HTML5 现在已经不是 SGML 的子集,主要是关于图像,位置...

    百度地图毕业设计源码-Front-End-interview-questions:整理收集常见前端面试问题及一些知识点

    决定使用何种协议来解析,以及切换浏览器模式。 浏览器模式: 3.1 标准模式、3.2 混杂模式。 3.1 标准模式 标准模式(standards mode):浏览器根据W3C标准来渲染页面。 3.2 混杂模式 混杂模式(quirks mode):...

    html doctype 作用介绍

    文档模式主要有以下两个作用: 1、告诉浏览器使用什么样的...BackCompat:标准兼容模式未开启(或叫怪异模式[Quirks mode]、混杂模式) CSS1Compat:标准兼容模式已开启(或叫严格模式[Standards mode/Strict mode])

    跟我学习javascript的严格模式

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行...“严格模式”体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。 另一方面

    JavaScript严格模式详解

    一、概述 除了正常运行模式,ECMAscript 5添加了第二种运行模式:”严格模式”(strict mode)。顾名思义,这种模式使得...“严格模式”体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器

    前端面试《综合问题版》

    怪异模式和标准模式? less 、 sass 、 postcss 、 prefix 层叠优先级 圣杯、双⻜燕布局 float 清除浮动 flex 布局、 grid 布局、 table 布局 css 以及中轴旋转、动画变换 绘制三⻆形、矩形、菱形、梯形(奇巧淫技,...

    feather-gb:只是用Rust编写的另一个GameBoy模拟器

    羽毛GB 只是另一个用Rust编写的GameBoy模拟器 :crab:...桌面标准-SDL2渲染的WIP (应该是跨平台的,但我仅测试了MacOS) 调试器-由egui渲染(使用glium作为后端)浏览器一般基于React&TypeScript 标准-具有某些样式

    IBM WebSphere Portal门户开发笔记01

    5、JS 计算网页内容的宽与高 (浏览器的标准模式与怪异模式) 237 6、JS设置与查看网页的解析模式(值) 249 7、JS判断对象是否已经存在 249 8、CSS设置网页在IE下为灰色显示 250 9、HTML A链接CSS样式 251 10、CSS...

    为什么使用DOCTYPE HTML

    你知道如果没有它,浏览器在渲染页面的时候会使用怪异模式;你知道各个浏览器在怪异模式下对各个元素渲染是有差异的。所以你会写像这样的doctype: 复制代码代码如下: &lt;!DOCTYPE html PUBLIC “-//W3C//DTD ...

    CSS3 box-sizing属性详解

     3、border-box,border和padding计算入width之内,其实就是怪异模式了~ 注意: ie8+浏览器支持content-box和border-box; ff则支持全部三个值。 使用时: -webkit-box-sizing: 100px; // for ios-safari, and

    排序:使用ReactJS进行各种常见排序算法的可视化工具

    我还了解了调试时JavaScript的一些怪异之处。 通过访问应用程序 该项目是通过。 可用脚本 在项目目录中,可以运行: npm start 在开发模式下运行应用程序。 打开在浏览器中查看。 如果进行编辑,页面将重新加载。...

Global site tag (gtag.js) - Google Analytics