关于clientHeight、offsetHeight、scrollHeight

2016-02-20 00:56 4 1 收藏

下面是个超简单的关于clientHeight、offsetHeight、scrollHeight教程,图老师小编精心挑选推荐,大家行行好,多给几个赞吧,小编吐血跪求~

【 tulaoshi.com - Web开发 】

关于clientHeight、offsetHeight、scrollHeight

window.screen.availWidth     返回当前屏幕宽度(空白空间)  
window.screen.availHeight     返回当前屏幕高度(空白空间)  
window.screen.width     返回当前屏幕宽度(分辨率值)  
window.screen.height     返回当前屏幕高度(分辨率值)  
window.document.body.offsetHeight;     返回当前网页高度  
window.document.body.offsetWidth;     返回当前网页宽度 

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

我们这里说说四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释。

这四种浏览器分别为IE(Internet Explorer)、NS(Netscape)、Opera、FF(FireFox)。

clientHeight
大家对 clientHeight 都没有什么异议,都认为是内容可视区域的高度,也就是说页面浏览器中可以看到内容的这个区域的高度,一般是最后一个工具条以下到状态栏以上的这个区域,与页面内容无关。

offsetHeight
IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
NS、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。

scrollHeight
IE、Opera 认为 scrollHeight 是网页内容实际高度,可以小于 clientHeight。
NS、FF 认为 scrollHeight 是网页内容高度,不过最小值是 clientHeight。

简单地说
clientHeight 就是透过浏览器看内容的这个区域高度。
NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。
IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。

同理
clientWidth、offsetWidth 和 scrollWidth 的解释与上面相同,只是把高度换成宽度即可。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

=======================================================================

clientHeight与offsetHeight的区别

许多文章已经介绍了clientHeight和offsetHeight的区别,就是clientHeight的值不包括scrollbar的高度,而offsetHeight的值包括了scrollbar的高度。然而,clientHeight和offsetHeight的值到底由什么组成的呢?如何计算这两个数的值?

1. clientHeight和offsetHeight的值由什么决定?

假如我们有以下的DIV,主要显示的文字为"This is the main body of DIV"。

如上图所示,clientHeight的值由DIV内容的实际高度和CSS中的padding值决定,而offsetHeight的值由DIV内容的实际高度,CSS中的padding值,scrollbar的高度和DIV的border值决定;至于CSS中的margin值,则不会影响clientHeight和offsetHeight的值。

2. CSS中的Height值对clientHeight和offsetHeight有什么影响?

首先,我们看一下CSS中Height定义的是什么的高度。如在本文最后部分APPENDIX示例代码(注:以下称为示例代码)中,innerDIVClass的Height值设定为50px,在IE下计算出来的值如下所示。也就是说,在IE里面,CSS中的Height值定义了DIV包括padding在内的高度(即offsetHeight的值);在Firefox里面,CSS中的Height值只定义的DIV实际内容的高度,padding并没有包括在这个值里面(70 = 50 + 10 * 2)。

in IE:
innerDiv.clientHeight: 46
innerDiv.offsetHeight: 50
outerDiv.clientHeight: 0
outerDiv.offsetHeight: 264

in Firfox:
innerDiv.clientHeight: 70
innerDiv.offsetHeight: 74
outerDiv.clientHeight: 348
outerDiv.offsetHeight: 362


在上面的示例中,也许你会很奇怪,为什么在IE里面outerDiv.clientHeight的值为0。那是因为示例代码中,没有定义outerDIVClass的Height值,这时,在IE里面,则clientHeight的值是无法计算的。同样,在示例代码中,如果将innerDIVClass中的Height值去年,则innerDIV.clientHeight的值也为0。(注:在Firefox下不存在这种情况)。

如果CSS中Height值小于DIV要显示内容的高度的时候呢(当CSS中没有定义overflow的行为时)?在IE里面,整个clientHeight(或者offsetHeight)的值并没有影响,DIV会自动被撑大;而在Firefox里面,DIV是不会被撑开的。如在示例代码中,将innerDivClass的Height值设为0,则计算结果如下所示。IE里面的DIV被撑开,其clientHeight值等于内容的高度与padding*2的和;而Firefox里面,文字将溢出DIV的边界,其clientHeight值正好是padding值的两倍。

In IE:
innerDiv.clientHeight: 38
innerDiv.offsetHeight: 42
outerDiv.clientHeight: 0
outerDiv.offsetHeight: 256

In Firefox:
innerDiv.clientHeight: 20
innerDiv.offsetHeight: 24
outerDiv.clientHeight: 298
outerDiv.offsetHeight: 312


APPENDIX 示例代码

html
head
style type="text/css"......
.innerDivClass
{...}{...}{...}{
       color: red;
       margin: 37px;
       padding: 10px;
       border: 2px solid #000000;
       height: 50px;


}
.outerDivClass
{...}{...}{...}{
       padding: 100px;
       margin: 200px;
       border: 7px solid #000000;
}
/style

script......
function checkClientHeight()
......{
      var innerDiv = document.getElementById("innerDiv");
      var outerDiv = document.getElementById("outerDiv");

       result.innerHTML = "innerDiv.clientHeight: " + innerDiv.clientHeight + "br /";
       result.innerHTML += "innerDiv.offsetHeight: " + innerDiv.offsetHeight + "br /";
       result.innerHTML += "outerDiv.clientHeight: " + outerDiv.clientHeight + "br /";
       result.innerHTML += "outerDiv.offsetHeight: " + outerDiv.offsetHeight + "br /";
}
/script
/head
body
div id="outerDiv" class="outerDivClass"
div class="innerDivClass" id="innerDiv"
Hello world.         
/div
/div
p/p
div id="result"
/div
input type="button" onclick="checkClientHeight()" text="Click Me" Value="Click Me" /
/body
/html

来源:http://www.tulaoshi.com/n/20160220/1632879.html

延伸阅读
在前面的图形绘制中,我们已经接触到了节点,初步了解到矢量图形的形状是由节 点控制的,并能简单的控制节点改变图形的形状。 控制点 是节点上的用于调节曲线形状的特殊的点。由于曲线的形状是由曲线上的节点及节 点上的控制点所决定的,因此通过移动节点和调节节点的控制点,可以改变曲线...
在工程文件中Application.Run语句之前加入下面语句,可不让主Form在运行时显示:       Application.ShowMainForm := False; 显示设置时间的对话框    ShellExecute(Handle, 'open', 'control', 'date/time', nil, SW_SHOW); FormatDateTime('yyyy mmm...
标签: PHP
Zend Optimizer(以下简称ZO)用优化代码的方法来提高PHP 4.0应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(Run-Time Compiler)产生的代码进行优化。 优化能提高你的盈利能力 一般情况下,执行使用ZO的PHP程序比不使用的要快40%到100%。这意味着网站的访问者可以更快的浏览网页,从而完成更多的事务,创造...
这两天因为兴趣及一个项目的原因,现在在研究jabber的安装及配置,真的是蛮麻烦的,不过linux下嘛,没有最麻烦,只有更麻烦!!所谓专业人士就,就是得顶着麻烦上:)这是我的第一篇blog,blog的生涯开始喽。。。这两天因为兴趣及一个项目的原因,现在在研究jabber的安装及配置,真的是蛮麻烦的,不过linux下嘛,没有最麻烦,只有更麻烦!!所谓专...

经验教程

469

收藏

67
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部