彻底搞清楚DOM元素的height,offsetHeight,clientHeight,scrollHeight

测试用例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        *{
          margin: 0;
          padding: 0
        }
        html{
            background: #00ffee;
            height: 600px;
        }
        body{
            border: 5px solid #ff0;
            margin:5px;
            padding: 5px;
            height: 800px;
        }
        #root {
            border: 5px solid red;
            width: 100px;
            height: 200px;
            overflow: auto;
            margin: 5px;
            padding: 5px;
        }
        #child {
            height: 300px;
            width: 200px;
            border: 5px solid blue;
            margin: 5px;
            padding: 5px;
            overflow: auto;
        }
        #hehe {
            height:200px;
            width: 300px;
            border: 5px solid purple;
            padding: 5px;
            margin: 5px;
        }
    </style>
</head>
<body>
    <div style="height: 100px"></div>
    <div id="root">
        <div id="child">
            <div id="hehe"></div>
        </div>
    </div>
    <script>
      document.onclick = function() {
          consolelog();
      }
      function consolelog () {
        let html = document.documentElement
        console.log("html.clientHeight=",html.clientHeight)
        console.log("html.clientWidth=",html.clientWidth)
        console.log("html.offsetHeight=",html.offsetHeight)
        console.log("html.offsetWidth=",html.offsetWidth)
        console.log("html.scrollHeight=",html.scrollHeight)
        console.log("html.scrollWidth=",html.scrollWidth)
        console.log(‘================================‘)
        let body = document.body;
        console.log("body.clientHeight=",body.clientHeight)
        console.log("body.clientWidth=",body.clientWidth)
        console.log("body.offsetHeight=",body.offsetHeight)
        console.log("body.offsetWidth=",body.offsetWidth)
        console.log("body.offsetTop=",body.offsetTop)
        console.log("body.offsetLeft=",body.offsetLeft)
        console.log("body.offsetParent=",body.offsetParent)
        console.log("body.scrollHeight=",body.scrollHeight)
        console.log("body.scrollWidth=",body.scrollWidth)
        console.log("body.scrollTop=",body.scrollTop)
        console.log("body.scrollLeft=",body.scrollLeft)
        console.log(‘=================‘);
        let root = document.getElementById("root");
        console.log("root.clientHeight=",root.clientHeight)
        console.log("root.clientWidth=",root.clientWidth)
        console.log("root.offsetHeight=",root.offsetHeight)
        console.log("root.offsetWidth=",root.offsetWidth)
        console.log("root.offsetTop=",root.offsetTop)
        console.log("root.offsetLeft=",root.offsetLeft)
        console.log("root.offsetParent=",root.offsetParent)
        console.log("root.scrollHeight=",root.scrollHeight)
        console.log("root.scrollWidth=",root.scrollWidth)
        console.log("root.scrollTop=",root.scrollTop)
        console.log("root.scrollLeft=",root.scrollLeft)
        //
        console.log(‘=================================\n‘);
        let child = document.getElementById("child");
        console.log("child.clientHeight=",child.clientHeight)
        console.log("child.clientWidth=",child.clientWidth)
        console.log("child.offsetHeight=",child.offsetHeight)
        console.log("child.offsetWidth=",child.offsetWidth)
        console.log("child.offsetTop=",child.offsetTop)
        console.log("child.offsetLeft=",child.offsetLeft)
        console.log("child.offsetParent=",child.offsetParent)
        console.log("child.scrollHeight=",child.scrollHeight)
        console.log("child.scrollWidth=",child.scrollWidth)
        console.log("child.scrollTop=",child.scrollTop)
        console.log("child.scrollLeft=",child.scrollLeft)
      }
    </script>
</body>
</html>

打开控制台,单击页面,查看各项参数

height: 样式中指定的高度,是content的高度,不含paddding及其他。

clientHeight: 包含padding的高度;

clientHeight = height + padding*2(根据设置的具体情况计算)

offsetHeight: 包含border的高度;

offsetHeight =clientHeight+borderWidth*2

但是:

上面的计算方法,不适用于html元素。其他都适用。
const html = document.documentElement;
const body = document.body;

/****html.offsetHeight*****/
1. 在不设置html高度的情况下; 增加的参数视具体情况不同
html.offsetHeight = body.offsetHeight+ margin*2
2. 如果设置html的高度为height;
html.offsetHeight = height;

/*****html.clientHeight*********/
clientHeight是浏览器可展示区域高度(去除菜单导航等),永远不变

scrollHeight:

1)  当前容器没有滚动条时,scrollHeight = clientHeight

2) 当前容器的内容超过容器的高度,出现滚动条时

scrollHeight = 当前容器的padding + child容器(滚动内容)的总高度(offsetHeight+margin)

scrollTop:

滚动后隐藏的内容的高度。

offsetTop:

当前容器上边界距离浏览器顶部的距离。

原文地址:https://www.cnblogs.com/lyraLee/p/11565904.html

时间: 2024-09-30 21:29:37

彻底搞清楚DOM元素的height,offsetHeight,clientHeight,scrollHeight的相关文章

主流浏览器下下offsetHeight\clientHeight\scrollHeight以及window的innerHeight\outHeight等的关系

1.Firefox32.03 body clientHeight:body.padding+ body.height(css设置或内容撑的,以设置的优先); offsetHeight:body.padding+ body.height(css设置或内容撑的,以设置的优先)+body.border; scrollHeight:body.padding+ body.height(css设置或内容撑的,谁大谁优先); documentElement clientHeight= window.inner

关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究

我是以chrome浏览器做的研究. 先看一段代码: <script> window.addEventListener('DOMContentLoaded',function(){ var node1 = document.querySelector('#father'); var node2 = document.querySelector('#child'); console.log('offsetTop==offsetHeight==scrollTop==scrollHeight==cli

DOM元素中height, clientHeight,offsetHeight等,到底是什么?

<div  style="height:200px;padding:10px;border:1px solid green;"></div> 对于上面的div,它的border的height有多高?答案是200+10*2+1*2=222. 直接上结论:在style或css样式中的 height:200px  指的是内容可视区的高度,不含内边距,不含border,不含外边距,而不是div的高度. 以下结论在 firefox.chrome.IE10+.QQ浏览器中都

html元素的 height、clientHeight和offsetHeight之间的区别

height:指元素内容的高度  ,jQuery中的height()方法返回的就是这个高度. clientHeight:内容高度+padding高度  ,jQuery中的innerHeight()方法返回的就是这个高度. offsetHeight:内容高度+padding高度+边框宽度  ,jQuery中的outerHeight()方法返回的就是这个高度. width:指元素内容的宽度  ,jQuery中的width()方法返回的就是这个宽度. clientWidth:内容高度+padding宽

JavaScript获取DOM元素位置和尺寸大小

在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识. 基础概念 为了方便理解,我们需要了解几个基础概念,每个HTML元素都有下列属性 offsetWidth clientWidth scrollWidth offsetHeight clientHeight scrollHeight offsetLeft clientL

获取DOM元素位置和尺寸大小

JavaScript获取DOM元素位置和尺寸大小 在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScript代码,我们需要了解一些基本知识. 基础概念 为了方便理解,我们需要了解几个基础概念,每个HTML元素都有下列属性 offsetWidth clientWidth scrollWidth offsetHeight clientHeight scroll

JavaScript获取DOM元素位置和尺寸

每一个HTML元素都有下列属性: offsetWidth clientWidth scrollWidth offsetHeight clientHeight scrollHeight offsetLeft clientLeft scrollLeft offsetTop clientTop scrollTop 首先,要理解HTML元素的实际内容可能会比分配给这个元素容纳内容的盒子要大,比如说一段很长的文字,把它放在了一个固定长宽的盒子里面,因此可能会出现滚动条. 1.clientHeight和cl

搞懂offsetY、offsetTop、scrollTop、offsetHeight、scrollHeight

先搞offsetTop,最难懂的就是它了 官方解释:返回当前元素的上边界到它的包含元素的上边界的偏移量,以像素为单位.这真TM坑爹啊!有木有!经过仔细研究查找得出结论:offsetTop是相对于离它最近的具有绝对或相对定位的父级元素的距离,有点绕口是不是?别急,咱慢慢剥开它...首先一定要明白offsetTop是一个相对值,那它到底是相对于谁的值呢,现在的女明星不都流行找干爹嘛,offsetTop也给自己找了一个,别人的要求是要有钱有权,而它的要求是要有position(只能是relative和

dom 元素操作 增删改

//获取网页宽高 var sHeight=document.documentElement.scrollHeight; var sWidth=document.documentElement.scrollWidth; //获取可视区域宽高 var wHeight=document.documentElement.clientHeight; var wWidth=document.documentElement.clientWidth; //创建div var oMask=document.cre