CSS盒模型是比较复杂的,尤其是当页面中有滚动条时,仅仅通过css来操作高度宽度是不够的,幸运的是Javascript提供了不少这样的接口。Javascript中clientHeight
/ cliengWidth
, scrollHeight
/scrollWidth
, offsetHeight
/ offsetWidth
, height
/ width
都可以获取高度和宽度,但是他们有一些细微的差别:
offsetHeight
/offsetWidth
:文档整体区域包含滚动条和border,对于display:block
的元素通过width/height + padding + border
可以计算出来。clientHeight
/cliengWidth
:可见区域包含padding
,不包含border
和滚动条,不能通过CSS样式计算出来,取决于滚动条的大小。scrollHeight
/scrollWidth
:内容区域的大小,不包含border
,包含不在可见区域内的隐藏部分,不能通过CSS样式计算出来。height
/width
:不包含border
和padding
。
另外:滚动条的宽度可以通过如下方式计算:
scrollbarWidth = offsetWidth - clientWidth - getComputedStyle().borderLeftWidth - getComputedStyle().borderRightWidth