zoukankan      html  css  js  c++  java
  • innerHeight,clientHeight,offsetHeight,scrollWidth等的区别和用法

     

    要理解这几个属性,首先要搞明白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+"
    window.innerHeight:"+window.innerHeight+"
    "+"document.documentElement.clientHeight:"+document.documentElement.clientHeight+"
    "+"document.documentElement.offsetHeight:"+document.documentElement.offsetHeight+"
    document.body.offsetHeight:"+document.body.offsetHeight+"
    document.body.clientHeight:"+document.body.clientHeight);
    

      

  • 相关阅读:
    jmeter如何引用自己编写的java文件编译的jar包
    Vue+Django REST framework 打造生鲜电商项目(学习笔记二)
    mysql笔试题
    面试遇到的问题
    Idea中maven项目pom文件中已引入testng但项目文件中无法引入@Test
    记录一次TestNg+MyBatis中的SqlSession出现的问题,问题虽然解决了但尚未明白问题原因
    PyMySQL的基本操作
    MySQL循环语句
    Vue父子组件和非父子组件间的通信
    Python的静态方法和类成员方法
  • 原文地址:https://www.cnblogs.com/diantao/p/5267898.html
Copyright © 2011-2022 走看看