【无标题】clientWidth、offsetWidth、scrollWidth与getBoundingClientRect

概要

在JavaScript中,我们常常要获取某个 HTML 元素的尺寸。但是在js中,我们往往能获取好几种尺寸,这几种尺寸的区别是什么呢?本文给出详细解析。

clientWidth与clientHeight

clientWidth表示某个元素的可见宽度(即元素内容区域的宽度),clientHeight表示某个元素的可见高度(即元素内容区域的宽度)。
它的计算规则只包括内容和内边距,不包括边框、滚动条和外边距。
例如clientWidth = content + padding(左右两个padding都要计算上)。
例如clientHeight = content + padding(上下两个padding都要计算上)。

offsetWidth与offsetHeight

offsetWidth表示某个元素的总宽度,offsetHeight表示某个元素的总高度
它的计算规则只包括内容和内边距和边框,不包括滚动条和外边距。
例如clientWidth = content + padding + border(左右两个padding、border都要计算上)。
例如clientHeight = content + padding + border(上下两个padding、border都要计算上)。

scrollWidth与scrollHeight

offsetWidth表示某个元素的内容区域的总宽度,包括被隐藏在视口之外的部分,offsetHeight同理。
它的计算规则只包括内容和内边距,不包括边框、滚动条和外边距。
但是有一点要特别注意:当content的区域过大以至于超过元素区域时,其scrollWidth与scrollHeight按照内容区域的宽高来算来算,包括visible和invisible两部分;如果content没有超过元素区域,则scrollWidth和scrollWidth计算方式相同,scrollHeight同理。

rect尺寸

通过调用dom元素的getBoundingClientRect()方法,我们能获得一个对象,这个对象里面记录了这个元素的width、height(当然还有top、bottom等位置信息)。这个属性与offsetWidth类似,其计算时包括元素的内容内边距边框

但是从浏览器渲染原理来看,这个尺寸与前三个尺寸有很大的不同!
clientWidth、offsetWidth、scrollWidth三种属性尺寸都属于layout tree(布局树)里的尺寸,是静态的,而getBoundingClientRect()方法拿到的尺寸是属于用户最终看到的尺寸。
一句话,如果这个元素不涉及transform变换的话,rect尺寸和offset相同;如果元素应用了transform变换,rect尺寸是经过变换后的尺寸,即用户最终看到的尺寸!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值