最近自己实现了一个瀑布流的插件,里面需要获取元素相关的尺寸,所以趁此想总结一下元素尺寸相关的内容。

本文大纲:

1、偏移尺寸(offset)

offset:偏移
offsetLeft、offsetTop、offsetHeight、offsetWidth
偏移尺寸,包含元素在屏幕上占用的所有视觉空间。
元素在页面上的视觉空间由其高度和宽度决定,包括所有内边距(padding)、滚动条和边框(但不包含外边距(margin))。以下4个属性用于取得元素的偏移尺寸。

  • offsetTop,元素上边框外侧距离包含元素(也就是offsetParent)上边框内侧的像素数。(不包括元素上边框的高度)。所以offsetTop是相对尺寸,相对于offsetParent。
  • offsetLeft,元素左边框外侧距离包含元素(也就是offsetParent)左边框内侧的像素数。(不包括元素左边框的宽度)。所以offsetLeft是相对尺寸,相对于offsetParent
  • offsetHeight,元素在垂直方向上占用的像素尺寸,包括它的高度、水平滚动条高度(如果可见)和上下边框的高度。offsetHeight = 上下border + 上下padding + height,offsetHeight是绝对尺寸,元素本身的高度加上上下内边距和上下边距
  • offsetWidth,元素在水平方向上占用的像素尺寸,包括它的宽度、垂直平滚动条宽度(如果可见)和左右边框的宽度。offsetWidth = 左右border + 左右padding + width,offsetWidth是绝对尺寸,元素本身的宽度加上左右内边距和左右边距

再次强调,其中offsetTop和offsetLeft是相对于包含元素的,包含元素保存在offsetParent属性中。

具体尺寸关系图如下:

2、客户端尺寸(client)

client:客户,顾客
元素的客户端尺寸,包含元素内容及其内边距所占用的空间。客户端尺寸只有两个相关属性:clientWidth和clientHeight。(不包含边框border
clientWidth:是内容区宽度加左、右内边距宽度。clientWidth = 左右padding + width
clientHeight:是内容区高度加上、下内边距高度。clientWidth = 上下padding + height

客户端尺寸实际就是元素内部的空间,因此不包含滚动条占用的空间。这两个属性最常用于确定浏览器视口尺寸,即检测document.documentElement的clientWidth和clientHeight。这两个属性表示视口(或元素)的尺寸。
document.documentElement.clientHeight // 会随着屏幕的大小而变化
document.documentElement.clientWidth // 会随着屏幕的大小而变化

注意:与偏移尺寸一样,客户端尺寸也是只读的,而且每次访问都会重新计算。
具体尺寸图关系如下:

3、滚动尺寸(scroll)

  • scrollTop:内容区域顶部隐藏的像素数,设置这个属性可以改变元素的滚动位置。
  • scrollLeft:内容区域左侧隐藏的像素数,设置这个属性可以改变元素的滚动位置。
  • scrollHeight:没有滚动条出现时,元素内容的总高度。
  • scrollWidth:没有滚动条出现时,元素内容的总宽度。

具体尺寸图关系如下:

4、确定元素尺寸

浏览器在每个元素都暴露了getBoundingClientRect()方法,返回一个DOMRect对象,包含6个属性:left、top、right、bottom、height和width。这些属性给出了元素在页面中相对于视口的位置。
其中left,top,right,bottom是相对于视口的位置( 都是以视口(应该说是可视区域)的左上角为原点(0,0)。不是相对于父级元素的)

  • left:元素的左边框距离视口左边的距离
  • right:元素的右边框距离视口左边的距离(left+元素的width+左右padding+左右border)
  • top:元素的上边框距离视口上边的距离
  • bottom:元素的下边框距离视口上边的距离(top+元素的height+上下padding+上下border)
  • width:左右border + 左右padding + 元素的width
  • height:上下border + 上下padding + 元素的height

元素尺寸总结(offsetWidth,clientWidth,scrollWidth)相关推荐

  1. JS中的offsetWidth, clientWidth, scrollWidth, innerWidth, outerWidth, pageXOffset

    value description offsetWidth 返回元素的宽度(包括元素宽度.内边距和边框,不包括外边距) offsetHeight 返回元素的高度(包括元素高度.内边距和边框,不包括外边 ...

  2. js获取屏幕尺寸、clientWidth、offsetWidth、scrollWidth等区别

    js获取元素/屏幕宽高 总结如下 1.获取网页可视区域宽高(随着页面的缩放,所获取的值会相应改变) 方法一.不包括滚动条的宽高在内 document.documentElement.clientWid ...

  3. clientWidth与offsetWidth与scrollWidth

    clientWidth与clientHeight 是元素的一个属性,表示元素的实际大小.,值为padding+content区的尺寸,不包括滑动条 offsetWidth与offsetHeight 是 ...

  4. JS中clientWidth offsetWidth innerWidth scrollWidth等区分

    由于前端经常会遇到计算位置的问题,那么搞懂clientWidth,offsetWidth,scrollHeight等等这些就变得尤为重要.放上经典图,一张图让你搞懂clientWidth,offset ...

  5. 关于Element中的clientWidth,scrollWidth,offsetWidth等属性详解

    2019独角兽企业重金招聘Python工程师标准>>> client-属性 clientWidth,clientHeight 只读属性,表示一个元素的**可见区域**宽高,以像素计单 ...

  6. JS 获取浏览器窗口大小clientWidth、offsetWidth、scrollWidth

    常用: JS 获取浏览器窗口大小 // 获取窗口宽度 if (window.innerWidth) winWidth = window.innerWidth; else if ((document.b ...

  7. 各种边距clientWidth、offsetWidth、scrollWidth、clientLeft、getBoundingClientRect详解

    1.clientWidth.offsetWidth.scrollWidth <!DOCTYPE html> <html><head><meta charset ...

  8. 四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释差异...

    转自http://blog.163.com/chudaozhe@126/blog/static/1157323432011626112137928/ 网页可见区域宽:document.body.cli ...

  9. Web APIs-事件流、事件委托、其他事件、元素尺寸与位置

    目录 事件流 事件捕获 事件冒泡 阻止冒泡 解绑事件 事件委托 其他事件 1.页面加载事件 2. 页面滚动事件 3.页面尺寸事件 元素尺寸与位置 今日单词 综合案例 事件流 事件完整执行过程中的流动路 ...

最新文章

  1. 硬盘为何会丢失数据?
  2. 关于同步VSS服务器上的代码发生Eclipse里面的项目全部不见了
  3. 使用jdk压缩war包
  4. Android官方开发文档Training系列课程中文版:电池续航时间优化之检查与监测坞的状态与类型
  5. restful api php,RestfulAPI · ThinkPHP6.0接口开发与应用及uniapp快速入门(更新完毕) · 看云...
  6. 炫酷超漂亮辅助网站源码
  7. Mysql字符串组合的问题
  8. 公钥、私钥、数字证书的概念 (讲得很明吧,通俗易懂)
  9. jupyetr notebook添加anaconda虚拟环境内核(tensorflow+pytorch)
  10. Java 对象不使用时,为什么要赋值为 null?
  11. 【Android 10 源码】深入理解 MediaCodec configure
  12. Avalondock 第二步 创建文档面板
  13. 网络游戏植入营销的成功案例
  14. 仿苹果官网首页面(Hbuilder X+CSS)
  15. Ae 表达式语言引用​:Comp
  16. 翻译: 3.4. Softmax 回归 pytorch
  17. 输入一个英文字母(可能是大写,也可能是小写),输出该字母在字母表中的序号(’a’和’A’的序号为1)
  18. 正则表达式验证生日手机号信息
  19. Vue.js小案例(2)
  20. 华为和荣耀的关系:亲兄弟,各自为王

热门文章

  1. 什么是内存泄漏?Chrome浏览器中怎么查看内存占用情况?
  2. iOS设置富文本行间距、字间距
  3. [linux]Linux下用vmware安装windows
  4. 国内主流银行网银安全性横向评测
  5. 《鬼武者》移除安装问题及功能键
  6. Qt下对软件试用期以及使用次数设置
  7. php rsa pss,RSA签名的PSS模式
  8. 扫地机器人单扫和双扫_单刷还是双刷?毛刷还是胶刷?irobot 871米家 扫地机器人 对比评测...
  9. PCIe 均衡技术介绍(逻辑物理篇)
  10. 世纪互联携手微软公有云Azure是我国企业信息化的福音