关于clientHeight、offsetHeight、scrollHeight

1396779138

1396779138

2016-02-20 00:56

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

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

关于clientHeight、offsetHeight、scrollHeight

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

我们这里说说四种浏览器对 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 的解释与上面相同,只是把高度换成宽度即可。

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

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

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

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

展开更多 50%)
分享

猜你喜欢

关于clientHeight、offsetHeight、scrollHeight

Web开发
关于clientHeight、offsetHeight、scrollHeight

doctype后如何获得body.clientHeight的方法

Web开发
doctype后如何获得body.clientHeight的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

关于makefile

编程语言 网络编程
关于makefile

关于黄瓜

电脑网络
关于黄瓜

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

关于reflow

Web开发
关于reflow

关于呼吸

瑜伽 养生 健康
关于呼吸

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

30个绝对优秀的JavaScript Web创意应用

30个绝对优秀的JavaScript Web创意应用

临“考”不乱 WPS助力考研复习最后冲刺

临“考”不乱 WPS助力考研复习最后冲刺
下拉加载更多内容 ↓