clientHeight、offsetHeight 和 scrollHeight

作者:chilleen 来源:千一网络(原创) 日期:2006-4-26

兼容性,特别是这几个东西的兼容性是很复杂的,为了简单,建议阅读再谈 document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth 这篇文章。

我们这里说说四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释,这里说的是 document.body,如果是 HTML 控件,则又有不同,点击这里查看。

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

文尾的重要说明比较重要,请注意。

看了评论,不少朋友,对我的描述还是很疑惑,所以我做了下面这个图,来帮助理解。

clientHeight、offsetHeight 和 scrollHeight

从图中,我们可以看到一个浏览器窗口,窗口被我故意拖小了,这样形成了滚动条,所以网页上端的内容就隐藏在了窗口上面,网页下端的内容就隐藏在了窗口下面。

clientHeight、offsetHeight 和 scrollHeight 大致可以这样解释(详细内容请仔细阅读后面的内容):

  • clientHeight 图中那块白的的高度。
  • offsetHeight、scrollHeight 图中白的+上阴影部分+下阴影部分,也就是网页内容高度。
  • 顺便提一下,那个上阴影部分(最上面一块渐变黑色),就是 scrollTop。

clientHeight

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

offsetHeight

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

scrollHeight

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

测试一下

测试文件

简单地说

clientHeight 就是透过浏览器看内容的这个区域高度。

NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。

IE、Opera 认为 offsetHeight 是可视区域 clientHeight 滚动条加边框。scrollHeight 则是网页内容实际高度。

同理

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

重要说明

以上是在没有指定 DOCTYPE 的情况下,如果指定了 DOCTYPE 为 XHTML,比如:DTD XHTML 1.0 Transitional,则意义又会不同,在这种情况下这三个值都是同一个值,都表示内容的实际高度(并不在乎窗口有多高)。

再说明一下,写这篇文章时,Chrome 浏览器还没有出来,后来我测试了一下 Chrome 在 指定了 DOCTYPE 为 XHTML 时的情况,真 BT,它的 clientHeight 和 offsetHeight 值相同,都表示内容的实际高度(并不在乎窗口有多高),scrollHeight 又是另外一套不知道什么玩意儿,总之这点它和 IE、Firefox 不同就是了。 

好,回过来,如果要在指定的 DOCTYPE 为 XHTML 的情况下,要按文章开头的解释(即 clientHeight、offsetHeight、scrollHeight 意义不同)来应用,怎么办呢?答案是:将 document.body 和 document.documentElement 一起应用,比如:document.documentElement.scrollLeft || document.body.scrollLeft(一般将 document.documentElement 写在前面),类似应用请参见:http://www.cftea.com/c/2008/06/U1FSRIC247DWTK2M.asp

相关阅读

你前面那位网友看了:百度首页为什么没有推荐新闻了?

▲▲▲嘿,欢迎转载传播本站原创文章,尽量保留来源噢。▲▲▲

文章评论
  • 1 楼:评论
    还是不懂.....
  • 2 楼:难以理解
    很难理解
  • 3 楼:评论
    明白
  • 4 楼:评论
    不明白
  • 5 楼:评论
  • 6 楼:评论
    不明白,不懂
  • 7 楼:评论
  • 8 楼:评论
  • 9 楼:评论
  • 10 楼:评论
    没内容 怎么就可以发表评论啊
  • 11 楼:评论
  • 12 楼:ceshi
    明白了
  • 13 楼:评论
    ;;
  • 14 楼:评论
    <a>还在琢磨</a>
  • 15 楼:评论
    http://www.还在琢磨.com
  • 16 楼:评论
     
  • 17 楼:评论
     
  • 18 楼:评论
    <a>什么东西啊?</a>
  • 19 楼:评论
    有点晕 。。 。。
  • 20 楼:没点开一个都是他们说相同的,真正知道问题的人都死光了?蹦出来些垃圾
  • 21 楼:评论
  • 22 楼:评论
    看不懂 有没图文并貌的
  • 23 楼:评论
    鄙视浏览器开发商,净求多事麻烦
  • 24 楼:评论
    写的不太对,就是加上dtd以后你写的就不对了。
  • 25 楼:评论
    点开一个都是他们说相同的,真正知道问题的人都死光了?蹦出来些垃圾
  • 26 楼:评论
    <script>alert('每点开一个都是他们说相同的,真正知道问题的人都死光了?蹦出来些垃圾')</script>
  • 27 楼:评论
    <>
  • 28 楼:评论
    正在搞这些东西,学了有一俩个月了,感觉还是不行,快急疯掉了
  • 29 楼:评论
    教育技术当前最热门的
  • 30 楼:评论
    <textarea>jfd
    </textarea>
  • 31 楼:评论
  • 32 楼:评论
    baidu
  • 33 楼:评论
    clientHeight、offsetHeight 和 scrollHeight 大致可以这样解释(详细内容请仔细阅读后面的内容):

    &#8226;clientHeight 图中那块白的的高度。
    &#8226;offsetHeight、scrollHeight 图中白的+上阴影部分+下阴影部分,也就是网页内容高度。
    &#8226;顺便提一下,那个上阴影部分,就是 scrollTop。
    ----------------------------------------------------
    这里好像写的不太清晰。。。。修改一下:
    clientHeight、offsetHeight 和 scrollHeight 大致可以这样解释(详细内容请仔细阅读后面的内容):

    &#8226;clientHeight 图中那块白的的高度。
    &#8226;offsetHeight 图中那块白的高度+边框高度
    &#8226;scrollHeight 图中白的+上阴影部分+下阴影部分,也就是网页内容高度。
    &#8226;顺便提一下,那个上阴影部分,就是 scrollTop。
  • 34 楼:评论
  • 35 楼:评论
    阴影部分 你指的是哪一块? 白色以外的地方吗? 弄晕了~
  • 36 楼:评论
    最上面一块渐变黑色
  • 37 楼:评论
    <em>shit.......</em>
  • 38 楼:<em>shit</em>
    ..
  • 39 楼:评论
    NS、FF 认为 offsetHeight 和 scrollHeight 都是网页内容高度,只不过当网页内容高度小于等于 clientHeight 时,scrollHeight 的值是 clientHeight,而 offsetHeight 可以小于 clientHeight。

    在ff5.0.1下,经过测试,offsetHeight 仍然为clientHeight+滚动条高度+边框高度!
  • 40 楼:评论
  • 41 楼:内容 可以为空。。。
  • 42 楼:评论
  • 43 楼:评论
    <script type="text/javascript">alert("哈哈")</script>
  • 44 楼:评论
    <script type="text/javascript">alert("哈哈")</script>
  • 45 楼:评论
    傻了
  • 46 楼:内容可以为空,真不错啊
  • 47 楼:评论
    有简单易懂的嘛??
  • 48 楼:评论
    clientheight是什么
  • 49 楼:评论
    問的只是<div> 的作用!!
赞助商们