有时在写页面时,需要获取一个div的高度。怎么才能获取呢?哈哈,先上结论。有两种方法。

  • offsetHeight 、clientHeight
  • getComputedStyle

offsetHeight 与 clientHeight
这两个属性都能获取元素的高度,它们有什么区别呢?
代码说话~

<!DOCTYPE html>
<html>
<head>
<title>demo</title>
<meta charset="utf-8">
<style type="text/css">
#demo {
width: 100px;
height: 200px;
background: yellow;
margin: 10px;
padding: 10px;
border: 2px solid blue;
}
</style>
</head>
<body>
<div id="demo">hello</div>
<script type="text/javascript">
var div = document.getElementById('demo');
console.log(div.offsetHeight); // 224
console.log(div.clientHeight); // 220
</script>
</body>
</html>

可以看出
offsetHeight = content + border + padding = 200 + 2 * 2 + 10 * 2 = 224
clientHeight = content + padding = 200 + 2 * 10 = 220
两个属性的差距于是就显而易见了。同样返回元素的高度,offsetHeight的值包括元素内容+内边距+边框,而clientHeight的值等于元素内容+内边距。区别就在于有没有边框~
但是,问题来了,我们想获取元素本身的高度呢?于是——
请往下看~
1,有小伙伴可能会说,我们可以直接利用style属性获取元素高度。然而在上面的代码中,

console.log(div.style.height) // ''

为空!
这是因为style属性只能获取元素标签style属性里的值。对于一个光秃秃的<div>style的输出是空的。
下面把内部样式表中的高度注释掉,写在行内样式中,改动如下。

#demo {
width: 100px;
/*height: 200px;*/
background: yellow;
margin: 10px;
padding: 10px;
border: 2px solid blue;
}
<div id="demo" style="height: 200px">hello</div>

这个时候style属性的输出为

console.log(div.style.height) // 200px

完美获得元素高度。
可是。问题又来了,如果我们每次都要写成内联样式,也太费事了吧。那么,该怎么办?
2,getComputedStyle
getComputedStyle方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来);这和style属性只能获取内联样式的行为形成了鲜明的对比。除此之外,getComputedStyle是只读的,但是style能文能武,可读可写,我们也可以利用它动态设置元素的高度。
我们只需输入这么一行代码。

window.getComputedStyle(div);

我只截了部分,可以清晰地看到,getComputedStyle方法取得了元素的所有样式
嗯,很适合查询。
可是我们只想要高度呀。那就让getPropertyValue方法来帮忙getPropertyValue方法可以获取CSS样式申明对象上的属性值
如。

console.log(window.getComputedStyle(div).getPropertyValue('height')); // 200px

耶,问题解决。
顺便要说一下,currentStyle属性也可以利用,不过这是IE浏览器的自娱自乐。兼容性极差。
想要更深入研究的,请参考张鑫旭大神的博客获取元素CSS值之getComputedStyle方法熟悉,再次膜拜大神~
---8.16补充---
根据@漫漫前端的评论,还有一种方法。
Element.getBoundingClientRect()方法获取与元素相关的CSS属性边框集合。
返回对象中共有6个属性。

当计算边界矩形时,会考虑视口区域(或其他可滚动元素)内的滚动操作,也就是说,当滚动位置发生了改变,top和left属性值就会随之立即发生变化(因此,它们的值是相对于视口的,而不是绝对的)。如果不希望属性值随视口变化,那么只要给top、left属性值加上当前的滚动位置(通过window.scrollX和window.scrollY),这样就可以获取与当前的滚动位置无关的常量值。
详情请参考Element.getBoundingClientRect()
再次END。

作者:公子七
链接:https://www.jianshu.com/p/58c12245c2cc
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

原文 JS获取div高度的方法

最新文章

  1. php实现设计模式之 原型模式
  2. 市面上主流服务器简单介绍(apache、IIS、tomcat..)
  3. Android中的“再按一次返回键退出程序”实现
  4. 析构函数和Dispose的使用区别
  5. Python3基础 print与,结合 一次输出多个数据
  6. Maven Archetype Plugin
  7. 实现类似微信的延迟加载的Fragment——LazyFragment
  8. typdef struct 语法
  9. Java中Map的用法详解
  10. Sublime Text 3 LESS、SASS、SCSS高亮插件、提示插件
  11. 在C++工程中main函数之前跑代码的廉价方法(使用全局变量和全局函数)
  12. springmvc-interceptor(拦截器)
  13. B+索引、Hash索引、数据类型长度
  14. RouterPassView——路由器密码查看工具
  15. 剑指offer 11. 位运算 二进制中1的个数
  16. UVA11468 Substring
  17. js/jquery控制页面动态加载数据 滑动滚动条自动加载事件--转他人的
  18. ELK系列七:Elasticsearch的集群配置和监控以及在部署ELK中踩的坑
  19. 洛谷P1494小Z的袜子 [国家集训队] 莫队
  20. UVA 1341 - Different Digits(数论)

热门文章

  1. 恺撒密码 B
  2. 使用Java Executor框架实现多线程
  3. JavaScript--常用对象的属性及方法(2)
  4. 解决ios中input兼容性问题
  5. S2-045、S2-046
  6. DAY1注册店铺
  7. 自定义printf 打印函数
  8. FreeRTOS时间管理
  9. git ls-files 列出被修改或者被删除的文件
  10. go语言defer关键字背后的实现,语法,用法