zoukankan      html  css  js  c++  java
  • document.body.clientHeight 和 document.documentElement.clientHeight 的区别

          这个问题是我在整合新的美工页面的时候发现的,在整合页面的时候菜单页面始终显示不出来。但是查看源代码,里面又已经打印出来了所有的菜单。唯一的解释就是js的问题了。用火狐firebug测试,发现其中一个取得页面高度的变量 bodyHeight 一直是0。就是因为他是0,所以菜单才显示不出来。

          而取得bodyHeight 高度的语句是 var bodyHeight = document.documentElement.clientHeight;

          于是在网上查找相关的资料,结合美工页面和程序的页面对比。

          document.body.clientWidth ==> BODY对象宽度
          document.body.clientHeight ==> BODY对象高度
          document.documentElement.clientWidth ==> 可见区域宽度
          document.documentElement.clientHeight ==> 可见区域高度

          程序页面里面少了一句 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

          我在ie下做了一下测试,测试结果:

          当页面上有DOCTYPE的时候,值为

          document.body.clientHeight = 54px
          document.documentElement.clientHeight = 729px

          当没有DOCTYPE时

          document.body.clientHeight = 729px
          document.documentElement.clientHeight = 0px

          可以看出,document.body.clientHeight 和 document.documentElement.clientHeight 的区别。

          就是因为少了DOCTYPE 所以 document.documentElement.clientHeight 的值为0。

          而换成 document.body.clientHeight就好了。

          为什么少了DOCTYPE,document.documentElement.clientHeight会为0呢?

    请看:

    关于获取各种浏览器可见窗口大小的一点点研究
    <script>
    function getInfo()
    {
    var s = "";
    s = " 网页可见区域宽:" document.body.clientWidth;
    s = " 网页可见区域高:" document.body.clientHeight;
    s = " 网页可见区域宽:" document.body.offsetWidth " (包括边线和滚动条的宽)";
    s = " 网页可见区域高:" document.body.offsetHeight " (包括边线的宽)";
    s = " 网页正文全文宽:" document.body.scrollWidth;
    s = " 网页正文全文高:" document.body.scrollHeight;
    s = " 网页被卷去的高(ff):" document.body.scrollTop;
    s = " 网页被卷去的高(ie):" document.documentElement.scrollTop;
    s = " 网页被卷去的左:" document.body.scrollLeft;
    s = " 网页正文部分上:" window.screenTop;
    s = " 网页正文部分左:" window.screenLeft;
    s = " 屏幕分辨率的高:" window.screen.height;
    s = " 屏幕分辨率的宽:" window.screen.width;
    s = " 屏幕可用工作区高度:" window.screen.availHeight;
    s = " 屏幕可用工作区宽度:" window.screen.availWidth;


    s = " 你的屏幕设置是 " window.screen.colorDepth " 位彩色";
    s = " 你的屏幕设置 " window.screen.deviceXDPI " 像素/英寸";
    //alert (s);
    }
    getInfo();
    </script>

    在我本地测试当中:
    在IE、FireFox、Opera下都可以使用
    document.body.clientWidth
    document.body.clientHeight
    即可获得,很简单,很方便。
    而在公司项目当中:
    Opera仍然使用
    document.body.clientWidth
    document.body.clientHeight
    可是IE和FireFox则使用
    document.documentElement.clientWidth
    document.documentElement.clientHeight

    原来是W3C的标准在作怪啊
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    如果在页面中添加这行标记的话 在IE中:
    document.body.clientWidth ==> BODY对象宽度
    document.body.clientHeight ==> BODY对象高度
    document.documentElement.clientWidth ==> 可见区域宽度
    document.documentElement.clientHeight ==> 可见区域高度
    在FireFox中:
    document.body.clientWidth ==> BODY对象宽度
    document.body.clientHeight ==> BODY对象高度
    document.documentElement.clientWidth ==> 可见区域宽度
    document.documentElement.clientHeight ==> 可见区域高度
    ?
    在Opera中:
    document.body.clientWidth ==> 可见区域宽度
    document.body.clientHeight ==> 可见区域高度
    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)
    document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

    而如果没有定义W3C的标准,则
    IE为:
    document.documentElement.clientWidth ==> 0
    document.documentElement.clientHeight ==> 0
    FireFox为:
    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)
    Opera为:
    document.documentElement.clientWidth ==> 页面对象宽度(即BODY对象宽度加上Margin宽)document.documentElement.clientHeight ==> 页面对象高度(即BODY对象高度加上Margin高)

  • 相关阅读:
    【洛谷 P4721】【模板】—分治FFT(CDQ分治+NTT)
    【Comet OJ】模拟赛测试 Day2题解
    【Comet OJ】模拟赛测试 Day2题解
    将本地文件夹push到github仓库
    2017-3-7
    彻底理解https!
    2017-3-2 智慧吉首调研工作
    java再巩固
    2017-3-1
    不错的博客哦
  • 原文地址:https://www.cnblogs.com/fhuafeng/p/1764589.html
Copyright © 2011-2022 走看看