clientWidth offsetWidth scrollWidth区别

Posted yang_chuanlong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了clientWidth offsetWidth scrollWidth区别相关的知识,希望对你有一定的参考价值。

clientWidth: 元素内部宽度,即可视内容区域宽度, 它包括左侧padding宽度加上可视内容宽度再加上右侧padding宽度。也即元素左边界内侧到右边界内侧的距离(再减去滚动条的宽度如果有滚动条的话)。

offsetWidth:元素外部宽度,即整个元素的宽度,包括左右边界宽度加上左右padding宽度再加上可视内容区域宽度

scrollWidth: 元素内部整个内容区域的宽度。在元素没有滚动条的情况, scrollWidth = clientWidth, 在元素有滚动条的情况下scrollWidth > clientWidth。

(1)元素没有滚动条

如下图为一个宽300px, padding-left为35px, padding-right为10px, border为15px的div


clientWidth = paddingLeftWidth + contentWidth + paddingRightWidth = 35px + 300px + 10px = 345px

offsetWidth = borderLeftWidth + paddingLeftWidth + contentWidth + paddingRightWidth + borderRightWidth = 15px + 35px + 300px + 10px + 15px = 375px

因为没有滚动条 scrollWidth = clientWidth = 345px

See this example in jsfiddle

(2)元素出现滚动条



此时

clientWidth = paddingLeftWidth + contentWidth + paddingRightWidth= 35px + 283px + 10px  = 328px

offsetSet = borderRightWidth + paddingLeft + contentWidth + paddingRight + scrollBarWidth + borderRightWidth =  375px;

scrollWidth =  paddingRightWidth + innerDivWidth + paddingRightWidth = 35px + 600px + (10px) = 635px

注意上式的计算结果应该为645px, 但如果一个display属性为block且具有设定宽度的div内嵌到宽度较窄的div中,滚动条出现,这时外面的div的padding-right就会被忽略。所以paddingRightWidth 10px, 就没被回到scrollWidth中去。

see the second example in jsfiddle


总结, offsetWidth >= clientWidth

scrollWidth >= clientWidth


滚动条的宽度 scrollWidth  = offsetWidth - borderRightWidth - borderLeftWidth - clientWidth;

现代浏览器中滚动的宽度一般为17px







以上是关于clientWidth offsetWidth scrollWidth区别的主要内容,如果未能解决你的问题,请参考以下文章

关于clientWidth scrollWidth offsetWidth的理解

scrollLeft,scrollWidth,clientWidth,offsetWidth详解

offsetWidth、scrollWidth、ClientWidth 属性不适用于 Html 元素

offsetwidth/clientwidth的区别

offsetwidth/clientwidth的区别

offsetwidth/clientwidth的区别