Sun_Blue_Sky

菩提本无树,明镜亦非台,本来无一物,何处惹尘埃 寻求内心的平静
随笔 - 21, 文章 - 92, 评论 - 75, 阅读 - 10万
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

关于clientHeight、offsetHeight、scrollHeight

Posted on   Sun_Blue_Sky  阅读(156)  评论(0编辑  收藏  举报
复制代码
代码
http://hi.baidu.com/lihuiran/blog/item/859de819530aca7fdab4bd81.html 

关于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> 

<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>
复制代码

 

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示