要理解这几个属性,首先要搞明白body,documentElement的区别

1、body是DOM对象里的body子节点,即<body>标签
2、documentElement是整个节点树的跟节点,即<html>标签

========================body,html的区别==================================

很多人都认为body和html是一样的,判断依据就是给body加背景颜色后,整个网页文档都会跟着变色。其实这种现象并不能说明body和html节点就是同一个东西,之所以会这样是由继承导致的。

我们都知道继承是指子元素继承父元素的某些特性,body作为html的子节点,理论上是不存在html继承body属性的,但就偏偏存在这样一个例外,html继承了body的background属性,这就导致了给body添加背景颜色整个html跟着变色。(各位同学可以试试给body加个高度,设置背景颜色,然后给html设置另外一个背景颜色,看看效果)

因此新建的网页在没内容的情况下,body的高度等于0,随着内容的增加,body的高度随之增加

========================结束=======================================

理解了body和html的区别就好理解innerHeight,clientHeight,offsetHeight,各浏览器之所以返回的值不同,根本原因就在于计算的基准不同

1、document.body以body元素为计算基准

2、document.documentElement以html为基准

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

以上都是在标准模式下,在怪异模式下情况又有点不同了:

IE在怪异模型(quick mode)下document.documentElement无法正确取到clietHeight,scrollHeight等值,比如clietHeight=0。可见IE的怪异模型并没有把html作为盒子模型的一部分,好在现在很少使用怪异模型。(注:如果页面没写DTD或写的不对,IE6默认使用怪异模型解析页面)

document.body.scrollHeight和document.documentElement.scrollHeight的区别:
document.body.scrollHeight是body元素的滚动高度,document.documentElement.scrollHeight为页面的滚动高度(正常情况下应该使用这个),且 document.documentElement.scrollHeight在IE和Firefox下还有点小差异。
IE : document.documentElement.scrollHeight = document.body.scrollHeight + marginTop bottom高度 + 上下border宽度
firefox : document.documentElement.scrollHeight = document.body.scrollHeight + marginTop bottom高度

IE、Opera 认为 offsetHeight = clientHeight + 滚动条 + 边框。
chrome、FF 认为 offsetHeight 是网页内容实际高度,可以小于 clientHeight。
IE知道11版本才修改成和chorme,ff一致

alert(document.compatMode+"\nwindow.innerHeight:"+window.innerHeight+"\n"+"document.documentElement.clientHeight:"+document.documentElement.clientHeight+"\n"+"document.documentElement.offsetHeight:"+document.documentElement.offsetHeight+"\ndocument.body.offsetHeight:"+document.body.offsetHeight+"\ndocument.body.clientHeight:"+document.body.clientHeight);

  

innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法的更多相关文章

  1. offsetWidth/offsetHeight,clientWidth/clientHeight与scrollWidth/scrollHeight的区别

    offsetWidth/offsetHeight返回值包含content + padding + border,效果与e.getBoundingClientRect()相同 clientWidth/c ...

  2. clientHeight ,offsetHeight,style.height,scrollHeight有区别与联系

    style.height 包括 元素的滚动条,不包括边框clientHeight 不包括元素的滚动条和边框,只有在没有元素的滚动条的情况下,style.height相等于clientHeightoff ...

  3. clientHeight & offsetHeight & scrollHeight

    clientHeight & offsetHeight & scrollHeight scrollWidth/scrollHeight,offsetWidth/offsetHeight ...

  4. 一起看看 scrollHeight,clientHeight,offsetHeight,scrollTop是个啥

    scrollHeight最终数值的组成: var scrollHeight = currentElementContent.height +currentElement.paddingTop+curr ...

  5. Position属性四个值:static、fixed、absolute和relative的区别和用法

    Position属性四个值:static.fixed.absolute和relative的区别和用法 在用CSS+DIV进行布局的时候,一直对position的四个属性值relative,absolu ...

  6. Python中内置数据类型list,tuple,dict,set的区别和用法

    Python中内置数据类型list,tuple,dict,set的区别和用法 Python语言简洁明了,可以用较少的代码实现同样的功能.这其中Python的四个内置数据类型功不可没,他们即是list, ...

  7. angularjs中provider,factory,service的区别和用法

    angularjs中provider,factory,service的区别和用法 都能提供service,但是又有差别 service 第一次被注入时实例化,只实例化一次,整个应用的生命周期中是个单例 ...

  8. [转]div与span区别及用法

    DIV与SPAN区别及div与san用法篇 接下来了解在div+css开发的时候在html网页制作,特别是标签运用中div和span的区别及用法.新手在使用web标准(div css)开发网页的时候, ...

  9. GROUP BY,WHERE,HAVING之间的区别和用法

      GROUP BY,WHERE,HAVING之间的区别和用法 分类: Oracle学习2009-11-01 23:40 21963人阅读 评论(6) 收藏 举报 mathmanagersql数据库m ...

随机推荐

  1. Linux学习--------二

    Linux基础知识 Linux文件系统为一个倒转的单根树状结构文件系统的根为"/" 文件系统严格区分大小写路径 使用"/"分割(windows使用"\ ...

  2. node命令

  3. HashMap和HashSet

    Java使用Set接口来描述集合,而Set中每一个数据元素都是唯一的. HashSet散列集合 Hash算法:把任意长度输入,通过散列算法,变换成固定长度的输出即散列值.对不同类型信息,散列值公式也是 ...

  4. [转载]利用@media screen实现网页布局的自适应,@media screen and

    开始研究响应式web设计,CSS3 Media Queries是入门.Media Queries,其作用就是允许添加表达式用以确定媒体的环境情况,以此来应用不同的样式表.换句话说,其允许我们在不改变内 ...

  5. AngularJS性能优化

    几个概念 域$scope和更新周期DigestCycle AngularJS的域本质上是一些JavaScript对象,它们从一些预定义的对象继承而来.基本上,小的域比大的域运行要快. 每创建一个新的域 ...

  6. WPF自定义空心文字

    首先创建一个自定义控件,继承自FrameworkElement,“Generic.xaml”中可以不添加样式. 要自定义空心文字,要用到绘制格式化文本FormattedText类.FormattedT ...

  7. [书目20160612]思考软件,创新设计——A段架构师的思考技术

    高焕堂:在校时期主修统计学和信息管理,将近40年软件开发生涯.工作于亚洲和欧美各地区,专精于商业策略思考和系统架构设计.近年来,热衷于<it+设计>教育顾问和产品开发. 第1章  商业思维 ...

  8. PHP_Bibel阅读学习(一)——看书看经典,写文写代码

    基础快速再看一下,然后每天有新的好玩的看. 这本书,反正好评不少,就是`PHP和MySQL Web开发`,机械工业出版社,澳洲人写的,红皮,有兴趣的可以看一下. 第一篇 使用PHP 一.入门 5分钟翻 ...

  9. 150922-写写博客监督下不自觉的自己-PPT,Linux,HTML

    开始学PHP的日子里,总是懒散的有一天没一天的.无意间听闻写博客来展示代码(现在还远远做不到哇),来监督个人每天的学习进度,鉴于自己还是爱写一点文字,但愿可以坚持下去. 凡是都喜欢有个计划,骨子里的理 ...

  10. instanceof

    java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例. instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例. result ...