关于元素的尺寸(dimensions)
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:editor 阅读 289
元素占据的物理空间的尺寸如果你需要获得元素占据的物理空间,那么使用offsetHeight和offsetWidth。自然而然此物理空间必然包含的有:padding、滚动条、border。这两个属性与

 

元素占据的物理空间的尺寸

如果你需要获得元素占据的物理空间,那么使用offsetHeight和offsetWidth。
自然而然此物理空间必然包含的有:padding、滚动条、border。这两个属性与getBoundingClientRect()的height和width属性是一致的。
为了帮助理解请看下图:
offsetHeight/offsetWidth

元素内容的可视区域的尺寸

可视区域指的包含padding,不包含border、滚动条。此时轻使用clientHeight和clientWidth。
为了帮助理解请看下图:
offsetHeight/offsetWidth

元素全部内容的尺寸

如果你要获取元素内容的真正大小,当然也包含那些不可见的内容,此时你需要使用scrollHeight/scrollWidth。
例如一张600*400的图片被包含在一个300*300的可滚动的容器元素内,那么scrollWidth将返回600,而scrollHeight将返回400
实测:当元素存在滚动条时,chrome浏览器获取元素的scrollHeight有时候不准确!但是本文的例子是正确的,不知道怎么重现。

获取元素的真实尺寸

大部分场景,我们并不关心元素的全部内容的尺寸(window/document/body元素除外),最常用的恐怕还是获取元素占据的物理空间(offsetHeight/offsetWidth)。
比如对某段文字设置自定义的tooltip,这个时候需要获取目标元素的高度然后对tooltip进行定位。
不论是clientHeight还是offsetHeight它们都包含了padding,假设这段文字包含了100px的padding,这个tooltip的位置显然会极其的不准确。

因此获取元素的高度通常是需要去掉padding。
由于元素的style属性只能获取到内联样式的width/height,所以在IE中需要使用el.currentStyle.height/width,

而标准浏览器中使用window.getComputedStyle(el,null).width/height。
下面是我整理的园友Snandy的一个用户获取元素真实高度和宽度的方法 :

    
 使用脚本库往往能帮助我们解决一些棘手的问题,下面来看看jQuery的相关方法

jQuery.height()/jQuery.width()

返回一个整数,为匹配的jQuery对象集合中第一个元素的高度值。 注意此结果不关心盒式模型,不包含元素的padding。此方法等价于getWH(el,'height/width') 这个方法同样能计算出window和document的高度。

jQuery.innerHeight()/jQuery.innerWidth()

对比jQuery.height() /jQuery.width() 此结果包含padding,但是不包含border。 当元素el未设置border时,此方法等价于el.offsetHeight/offsetWidth

jQuery.outerHeight()/jQuery.outerWidth()

对比jQuery.height() /jQuery.width() 此结果包含padding和border,默认不包含margin。 当元素未指定margin时,此方法等价于el.offsetHeight/offsetWidth 可以传入一个bool变量来指定是否包含margin。

注意: 由于获取普通元素的全部内容的尺寸意义不大(某些元素除外如window、document、iframe等), 所以jQuery的这三个方法都未包含不可见区域。

小测试

下面是一个div设置了高度200px,padding为3px,border为1px,里面的图片为958*512

clientHeight offsetHeight scrollHeight jQuery.height() jQuery.innerHeight() jQuery.outerHeight()

上面的值你都猜对了吗?

 

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2