今天我想来探索一下几个经常搞混淆的概念,比如:
clientWidth,offsetWidth,scrollWidth有什么区别?clientHeight,offsetHeight,scrollHeight有什么区别?clientTop,offsetTop,scrollTop有什么区别?clientLeft,offsetLeft,scrollLeft有什么区别?上面这些属性和
style.width,style.height,style.left,style.top有什么区别?div.clientXXX和document.body.clientXXX有没有区别?不同浏览器之间有没有什么不同?(主要是chrome,firefox,Edge)
要解答以上问题,最直接的方式是写一个demo测试一下,下面放出测试代码。
1 | <!DOCTYPE html> |
额外说明
在所在容器的css属性是
box-sizing: content-box(默认)时,style.width实际上是:实际内容宽度 + 浏览器默认滚动条宽度(在chrome和firefox上测试了都等于17px),而clientWidth这时等于= 实际内容(style.width - 浏览器滚动条默认宽度) + padding(即paddingLeft + paddingRight),不包括滚动条宽度,因此此时clientWidth != style.width;在所在容器的css属性是box-sizing: border-box时,这时style.width等于offsetWidth,即实际内容宽度 + padding + border,而这时clientWidth等于 = 实际内容 + padding,但是这时实际内容时多少呢?实际内容等于 = (style.width - border - padding - 浏览器滚动条默认宽度)在css属性是
box-sizing:content-box(默认)时,jquery.width() = style.width , jquery.outerWidth() = dom.offsetWidth; 在css属性是box-sizing:border-box时,jquery.width() = style.width - border - padding , jquery.outerWidth() = dom.offsetWidth