您现在的位置:首页 >> 前端 >> 内容

offsetWidth与offsetHeight获取元素的宽度和高度,currentStyle与getComputedStyle结合使用来获取css属性值

时间:2017/10/20 9:45:00 点击:

  核心提示:最近老师在讲运动框架,又再次提到了offset家族,又给我重温了一遍以前的知识点。现在接触到了CSDN,就想把它记录下来,让自己印象更深刻一点。offsetWidth与offsetHeight都是符合...

最近老师在讲运动框架,又再次提到了offset家族,又给我重温了一遍以前的知识点。现在接触到了CSDN,就想把它记录下来,让自己印象更深刻一点。

offsetWidth与offsetHeight都是符合现在浏览器的标准盒模型的,所以用它获取元素的宽度和高度时,它会将元素的border、padding以及内容计算进去。

可有时候我们只想操作内容区,不包括border。这时使用offsetWidth或者offsetHeight来获取元素的宽和高就有问题了。

这时,我们有了另一种解决方法,那就是使用currentStyle与getComputedStyle结合使用来获取css属性值。具体的封装写法如下:

function getStyle(obj, attr){
    if(window.getComputedStyle){
        return window.getComputedStyle(obj, false)[attr];
    }else{
        return obj.currentStyle[attr];
    }
}

将它封装成函数,以后要再获取元素的属性值时就可以直接调用了,非常方便。

但是呢,在IE下,如果没有声明某个属性值,用该函数来获取时,会出现一些意想不到的事情。

比如,用该函数来获取背景颜色时会返回undefined,获取高度和宽度都会返回auto,获取字体大小会返回12pt,以上获取都是未在css里声明属性值,并且是在IE9以下浏览器下获取时发生的。

iE9及9以上获取宽度、高度、字体大小时会返回默认值(实际测试中发现字体大小返回的是15.99px),获取某些值时会返回空,获取某些值时会返回auto,某些会返回默认值。

所以,在使用该函数时,若要兼容IE,最好把要获取的元素的初始值在css里面写一遍,否则出现了莫名其妙的bug,找了半天才发现是没有初始化的话,那就太浪费时间了。

Tags:OF FF FS SE 
作者:网络 来源:小星的博客