彻底搞清楚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:
当前容器上边界距离浏览器顶部的距离。
彻底搞清楚DOM元素的height,offsetHeight,clientHeight,scrollHeight的更多相关文章
- 关于offsetTop offsetHeight clientHeight scrollHeight scrollTop的区别研究
我是以chrome浏览器做的研究. 先看一段代码: <script> window.addEventListener('DOMContentLoaded',function(){ var ...
- [DOM基础]offsetHeight,clientHeight,scrollHeight,innerHeight,outerHeight等属性的解释
由于经常搞混这几个属性,所以查找资料总结一下,方便以后翻出来温习. 一.偏移量-以offset开头的 1.offsetHeight:元素在垂直方向上占用的空间大小,像素.包括元素的高度.可见的水平滚动 ...
- offsetTop,offsetHeight,clientHeight,scrollHeight,scrollTop区别
这些高度相信很多同学都搞不清楚吧.这里我通过本地测试,发现了区别. 以聊天窗口为例. 元素(class='content')高度444px,其中上下padding分别是10px,margin为0.距离 ...
- offsetHeight,clientHeight,scrollHeight,offsetY等属性的理解
el.offsetHeight = height + padding + border(滚动条是在边框内的,自然也包括在内) el.clientHeight = 可视化看到的高度 (就是content ...
- JavaScript获取DOM元素位置和尺寸大小
在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽略的一部分,要想写出预想效果的JavaScri ...
- 获取DOM元素位置和尺寸大小
JavaScript获取DOM元素位置和尺寸大小 在一些复杂的页面中经常会用JavaScript处理一些DOM元素的动态效果,这种时候我们经常会用到一些元素位置和尺寸的计算,浏览器兼容性问题也是不可忽 ...
- jquery 对象的 height、innerHeight、outerHeight 的区别以及DOM 元素的 clientHeight、offsetHeight、scrollHeight、offsetTop、scrollTop
前言:jquery 对象的 height.innerHeight.outerHeight,还有 DOM 元素的 clientHeight.offsetHeight.scrollHeight.offse ...
- 第一百一十七节,JavaScript,DOM元素尺寸和位置
学习要点: 1.获取元素CSS大小 2.获取元素实际大小 3.获取元素周边大小 本章,我们主要讨论一下页面中的某一个元素它的各种大小和各种位置的计算方式,以便更好的理解. 一.获取元素CSS大小 1. ...
- height、clientHeight、offsetHeight、scrollHeight、height()、 innerHeight()、outerHeight()等的区别
1.height height是css属性,这个属性定义元素内容区的高度,在内容区外面可以增加内边距.边框和外边距. 当 box-sizing: content-box 时,高度应用到元素的内容框. ...
随机推荐
- (十六)springMvc 补充
文章目录 数据回显 `@ModelAttribute` && `@SessionAttributes` 注解 数据回显 对 pojo 数据回显的支持 ,springMvc 会默认的将传 ...
- Python后台执行不启用缓存
1.运行时加-u参数,如 # python3 -u test.py >> test.log & 用man查看python的-u参数,说明如下: Force stdin, stdou ...
- Qt:用 __thread 关键字让每个线程有自己的全局变量
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/wsj18808050/article/d ...
- Django model反向关联名称的方法(转)
原文:https://www.jb51.net/article/152825.htm
- dev 从表处理
从表列名,从表选中行和主表选中一样,var selectrow = detailView.GetRow(detailView.FocusedRowHandle) as obj; private voi ...
- ef报错(因为相同类型的其他实体已具有相同的主键值)
修改数据的时候查询了下数据 于是报错了,我吧查询不加入缓存中,吧getbyid的方法改成.AsNoTracking().FirstOrDefault(p => p.x== x)
- TR-TR模块资料汇总
转载: TR模块培训 https://www.docin.com/p-1704805923.html 现金管理(Cash Management)和预算控制(Cash Budget Management ...
- 【Distributed】分布式解决方案【汇总】
一.问题引出 二.分布式Session问题 三.网站跨域问题 四.分布式任务调度平台 五.分布式配置中心 六.分布式锁解决方案 七.缓存技术 一.问题引出 [Distributed]分布式系统中遇到的 ...
- 虚拟机安装master,克隆slave0、slave1(多台机相连,网络匹配)
1.在虚拟机中创建一个名叫master的主机 2.创建成功后,打开编辑选项——虚拟网络网络编辑器,填网关 3.打开终端,进入root权限,编写命令 设置虚拟机DNS 4.给master网络配置好后,克 ...
- Linux软件包(源码包和二进制包)及其区别和特点
Linux 下的软件包众多,而且几乎都是经 GPL 授权的,也就是说这些软件都免费,振奋人心吧?而且更棒的是,这些软件几乎都提供源代码(开源的),只要你愿意,就可以修改程序源代码,以符合个人的需求和习 ...