getComputedStyle
是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。
一、getComputedStyle与style的区别
我们使用element.style
也可以获取元素的CSS样式声明对象,但是其与getComputedStyle
方法还有有一些差异的。
- 只读与可写
正如上面提到的getComputedStyle
方法是只读的,只能获取样式,不能设置;而element.style
能读能写,能屈能伸。 - 获取的对象范围
getComputedStyle
方法获取的是最终应用在元素上的所有CSS属性对象(即使没有CSS代码,也会把默认的祖宗八代都显示出来);而element.style
只能获取元素style
属性中的CSS样式。因此对于一个光秃秃的元素<p>
,getComputedStyle
方法返回对象中length
属性值(如果有)就是190+
(据我测试FF:192, IE9:195, Chrome:253, 不同环境结果可能有差异), 而element.style
就是0
。
二、getComputedStyle的兼容性
1、pc端支持:
Chorme、firefox、ie9以上、Safari,OPera
1、移动端支持:
Android、Firefox Mobile、IE Mobile、Opera Mobile、
Safari Mobile
三、getComputedStyle与currentStyle
currentStyle
是IE浏览器自娱自乐的一个属性,其与element.style
可以说是近亲,至少在使用形式上类似,element.currentStyle
,差别在于element.currentStyle
返回的是元素当前应用的最终CSS属性值(包括外链CSS文件,页面中嵌入的<style>
属性等)。
因此,从作用上将,
getComputedStyle
方法与currentStyle
属性走的很近,形式上则style
与currentStyle
走的近。不过,currentStyle
属性貌似不支持伪类样式获取,这是与getComputedStyle
方法的差异,也是jQuerycss()
方法无法体现的一点。
function getCss(ele,attr,pseudo){//表示获得ele元素的attr属性的样式值
pseudo=pseudo||null;
//if(typeof getComputedStyle =="function"){
if(window.getComputedStyle){
return getComputedStyle(ele,pseudo)[attr];// [attr]
}else{
return ele.currentStyle[attr]
}
/*try{
return getComputedStyle(ele,pseudo)[attr];
}catch(e){
return ele.currentStyle[attr]
}*/
}
IE Mobile |
---|