`

javaScript 计算网页内容的宽与高 (浏览器的标准模式与怪异模式)

阅读更多

 

标准模式与怪异模式:

       由于历史的原因,各个浏览器在对页面的渲染上存在差异,甚至同一浏览器在不同版本中,对页面的渲染也不同。在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,用来显示其它网页,并可以提交表单。

 

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

//计算窗口的高宽和滚动条的位置
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-----------------------------------------------------

 

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/

 

  • 大小: 210.8 KB
  • 大小: 38.8 KB
  • 大小: 34 KB
分享到:
评论
2 楼 mgh2008 2010-11-01  
很不错,收了
1 楼 elf8848 2010-10-31  
今天休息,我更新了本文章,重新整理,添加了一些新内容。

相关推荐

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

    在怪异模式下,浏览器会使用非标准的解析规则,导致布局和样式表现与标准模式有很大差异,特别是在CSS的盒模型上,它通常采用IE的老式盒模型,其中元素宽度不包括边框和内边距。 DOCTYPE声明的写法直接影响到浏览器...

    跨浏览器兼容性问题.docx

    IE6和IE7采用的是"怪异盒模型",其中边框和内填充被添加到了元素的总宽度和高度中,而其他现代浏览器遵循W3C标准的盒模型,将它们计算在内容区域之外。因此,为了确保元素在所有浏览器中正确对齐,通常需要初始化`...

    javascript面试题

    严格模式与混杂模式-如何触发这两种模式,区分它们有何意义?** - **Doctype**:告知浏览器遵循何种文档类型标准。 - **严格模式**:通过正确的 Doctype 触发。 - **混杂模式**:通过错误的 Doctype 或没有 Doctype ...

    最全前端面试题-2.2(浏览器兼容问题篇-上百篇题集整理1个月).doc

    - **标准模式与怪异模式**:通过正确的doctype声明确保浏览器以标准模式渲染页面。 - **事件对象`event`的`X`、`Y`属性**:IE与Firefox获取坐标的方式不同,需分别处理。 - **iOS键盘“搜索”按键**:处理搜索键...

    web标准培训教案-CSS+DIV

    - **IE与FF的盒模型差异**:Firefox和IE在处理盒模型时有所不同,IE5.x和怪异模式的IE6.0只计算内容宽度,而Firefox等其他浏览器考虑了内容、内边距和边框的总和。为了解决这个问题,通常使用标准文档声明,并避免...

    面试宝典指南大全

    54. **浏览器标准模式与怪异模式区别** 标准模式和怪异模式在CSS渲染规则上有差异,主要体现在盒模型、内容定位等方面。 #### 总结 面试宝典指南大全是一个涵盖了前端开发中可能遇到的各类问题的知识库,特别...

    面试题库.docx

    14. **浏览器标准模式与怪异模式**:标准模式遵循W3C标准,元素宽度仅包含内容宽度;怪异模式下,浏览器使用自己的非标准渲染规则,如IE盒模型。`window.top.document.compatMode`可检测当前模式。 以上知识点涵盖...

    浅谈浏览器的兼容模式下的button中文字垂直方向不居中显示

    这通常与“标准模式”或“怪异模式”相对应。现代浏览器中包括IE在内的多数浏览器都支持这种模式。兼容模式是一种向后兼容的解决方案,它允许旧的网页在新的浏览器环境中以旧的渲染规则工作。 对于Button中文字在...

    浏览器的兼容

    标准模式与怪异模式下的CSS处理差异显著,尤其是IE系列。正确声明DOCTYPE有助于确保网页在各浏览器中的表现一致性。 2. **Margin的处理**:Firefox对`margin-left`和`margin-right`设置为`auto`的元素会自动居中,...

    史上最全前端面试题(含答案).docx

    14. **浏览器标准模式与怪异模式**:标准模式遵循W3C标准,怪异模式(Quirks Mode)模拟早期浏览器的非标准解析方式。可以通过`document.compatMode`判断。 15. **网站文件和资源优化**:文件合并减少HTTP请求,...

    最新史上最全前端面试题(含答案).docx

    14. **浏览器标准模式与怪异模式**:标准模式遵循W3C标准,怪异模式(Quirks Mode)遵循老式浏览器的渲染规则。可以通过`window.top.document.compatMode`检测当前模式。 15. **网站资源优化**:文件合并减少HTTP...

    Iframe框架自动适应高度示例详解.pdf

    这两种情况分别对应于标准模式和怪异模式下的页面高度。 4. 为了确保兼容性,代码还对不同浏览器进行了一些特别的处理。例如,如果是在IE浏览器中,高度值会额外增加4像素;如果是Opera浏览器,则额外增加1像素。...

    2016前端面试题及答案.docx

    14. **标准模式与怪异模式**:两者是浏览器渲染页面的不同模式,标准模式遵循W3C标准,怪异模式沿用早期浏览器的非标准解析方式,主要差异在于盒子模型和CSS渲染。 15. **网站资源优化**:包括文件合并、文件最小化...

    物理弹性滚动对联广告代码

    如果省略了这个声明,浏览器可能会进入怪异模式,这可能导致一些预期之外的行为,特别是在处理CSS布局和JavaScript交互时。 在尝试添加DOCTYPE后滚动功能失效,可能是由于以下原因: 1. **盒模型改变**:DOCTYPE会...

    支付宝生活助手导航代码兼容FF IE6789 等主流浏览器

    - **盒模型差异**:IE6、7使用怪异模式,盒模型计算方式与标准模式不同,需特别注意宽高设置。 - **JavaScript兼容性**:IE6-9对某些ECMAScript 5特性支持不足,可能需要引入jQuery或其他库来弥补。 2. **导航栏...

    web前端面试题及答案【前端开发面试题及答案整理】.docx

    标准模式遵循W3C标准,怪异模式遵循早期浏览器的非标准解析方式。可以通过`document.compatMode`检查当前模式。 14. **资源优化策略** 包括文件合并减少HTTP请求,文件最小化/压缩减小文件大小,使用CDN加速内容...

    【吐血整理】阿里前端面试题总结(1)【超全超细带答案!!】

    - DOCTYPE的作用是声明文档类型,防止浏览器将文档内容按照“怪异模式”渲染,确保按照标准模式展示页面。 - 标准模式与兼容模式的区别在于,标准模式按照W3C标准渲染页面,而兼容模式则向后兼容老版本的浏览器,...

    前端复习资料.pdf

    39. **标准模式与怪异模式**: 浏览器解析文档时会根据DOCTYPE声明决定是使用标准模式还是怪异模式。 40. **浏览器内核**: 主要有Trident、Gecko、WebKit、Blink等。 41. **内核与兼容性**: 浏览器内核的差异导致了...

    web前端问题[归类].pdf

    - 标准模式与怪异模式主要区别在于盒模型的处理和CSS渲染规则。标准模式遵循W3C规范,而怪异模式则倾向于早期浏览器的非标准行为。 4. **JavaScript库**: - 常见的JavaScript库有jQuery、SeaJS和YUI,它们提供...

Global site tag (gtag.js) - Google Analytics