• 四种浏览器对 document.body 的 clientHeight、offsetHeight 和 scrollHeight 的解释


    兼容性,特别是这几个东西的兼容性是很复杂的,为了简单,建议阅读再谈 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.cnblogs.com/wang726zq/archive/2012/05/10/2494256.html

  • 相关阅读:
    python调用函数实现数据的增删改查(1)
    VA Code编写html(1)
    python 跑服务器,访问自己制作的简单页面
    python调用函数实现数据的增删改查(2)
    VS Code编写html(2)
    python编写简单的html登陆页面(4)
    python编写简单的html登陆页面(1)
    虚拟机端口映射!
    VIM 主题管理
    Vim 窗口管理插件
  • 原文地址:https://www.cnblogs.com/wang726zq/p/scrollHeight.html
Copyright © 2020-2023  润新知