网上不是有这么个段子嘛:可怕的是,比你聪明的人比你更勤奋。那么,这里的“勤奋”的差异体现在什么地方呢?就拿这个getComputedStyle举例:懒惰青年是看一下,立马像看见凤姐一样视线离开;普通青年是看一下,发现自己不了解,百一下或谷一下,熟悉了解之;勤奋青年是不仅了解,还抽出时间实践之(如做个简单demo测试),熟悉方法的特异性,验证一些观点正确性。 ---来自张鑫旭博客里面的一段。
逛着博客看到大神张鑫旭的博客里面有以上这一段话,然后看看手中的JS高程这本书,发现我也得总结一些什么吧...虽然有的内容在日常开发中用不到,但是一些框架的底层中却有可能使用到了。
在HTML中定义样式有三种方法:外部样式表,嵌入样式表,内联样式。在DOM2级样式中围绕这三种方式提供了一套API。首先要知道新的东西在各种版本的浏览器上是会存在兼容性问题。所以提供一种检测浏览器是否支持DOM2级别的CSS能力:
var support = document.implementation.hasFeature('CSS', '2.0') //返回true或者false
一、访问元素的样式
任何支持style特性的HTML元素都有对应的一个style属性,这个style属性是一个CSSStyleDeclaration的实例。这个属性只包含元素所有通过style特性设置的样式信息。
注意:float属性在JavaScript中是一个关键字,所以我们需要用另一种形式表现,在IE中是通过styleFloat表示,其他浏览器中是通过cssFloat表示。
通过style属性设置样式的同时也是动态的改变元素的外观。在标准模式下度量值都是需要设置单位,在混杂模式下不一定需要,所以我们建议都指定度量单位。
-
DOM样式属性和方法
在DOM2规范中为style对象定义了一些属性和方法。
1.cssText:可以通过这个属性访问style特性中的css代码。也可以通过它进行设置样式代码;
obj.style.cssText='width:100px;height:100px'
可以看到这个属性可以一次设置多个样式,这样比一个个设置方便了很多
2.length:表示应用给元素CSS属性的数量(只计算style特性中的长度)
3.parentRule:表示cssRule对象。
4.getPropertyCssValue(propertyName):返回包含指定属性值得cssValue对象。(在chrome下报错没有这个方法)
5.getPropertyValue(propertyName):返回给定属性的字符串值。(只返回style特性中的样式)
6.item(index):返回指定位置的Css属性名称。
7.removeProperty(propertyName):从样式特性中删除指定属性。
8.setProperty(property, value, priority):将给定属性设置为相应的值,并加上优先权标志。
注意:
1.cssText可以返回style特性中css代码的内部表示,可以设置style特性的值,不过这个设置会覆盖它已有的style的值。
2.getPropertyCssValue会返回包含两个cssValue对象,这两个属性分别是cssText和cssValueType,cssText返回的就是样式的值,但是cssValueType返回的是一个数量值,0表示是继承而来的,1表示是基本的值,2表示值列表,3表示自定义的值。
-
计算的样式
这里要介绍两个计算样式的属性方法:
- getComputedStyle()方法:
该方法接受两个参数,第一,要取得样式的元素,第二,设置为null就可以了。该方法返回的是一个CSSStyleDeclaration对象,和style属性的类型相同。
格式:
document.defaultView.getComputedStyle(element, null)[cssAttr]
window.getComputedStyle(element, null)[cssAttr]
eg:
document.defaultView.getComputedStyle(div, null)['height']
window.getComputedStyle(div, null)['height']
实际上,使用defaultView
基本上是没有必要的,getComputedStyle
本身就存在window
对象之中。根据DennisHall的说法,使用defaultView
可能一是人们不太乐意在window上专门写个东西,二是让API在Java中也可用(这我不懂,忘指点~~)。---来自张鑫旭
2.currentStyle属性
在IE中不支持上面的方法,该属性也是CSSStyleDeclaration的一个实例,包含当前元素所有计算过的属性。
使用方法
obj.currentStyle['height']