# 理解 offsetWidth, clientWidth, scrollWidth 和 高度

2 min read
Table of Contents

CSS 的盒子模型相当复杂,尤其是涉及到滚动内容的时候。虽然浏览器使用 CSS 的值来绘制方框,但使用 JS 来确定所有的尺寸会更加方便。

这就是为什么每个元素都有六个 DOM 属性以方便你使用:offsetWidth, offsetHeight, clientWidth, clientHeight, scrollWidth 和 scrollHeight。这些都是代表当前视觉布局的只读属性,而且都是整数(因此可能有四舍五入的错误)。

如果你想要一个更准确的小数值,请使用 element.getBoundingClientRect().

offsetWidth/offsetHeight

视觉框的大小,包括所有边框。

offsetWidth/offsetHeight = width/height + paddings + borders

clientWidth/clientHeight

盒子内容的视觉部分,不包括边框或者滚动条,但包括 padding。

clientWidth/clientHeight = width/height + paddings

scrollWidth/scrollHeight

盒子里所有内容的大小,包括目前隐藏在滚动区域外的部分。

如果元素内容刚好合适而不需要滚动条,那么 scrollWidth 等于 clientWidth

参考链接


More Posts

# React Fiber 的简单介绍

7 min read

Fiber 就是 React 16 实现的一套新的更新机制,让 React 的更新过程变得可控,避免了之前采用循环递归无法中断影响性能的做法。