样式的机制提供了一套API。要确定浏览器是否支持DOM2 级定义的CSS 能力,可以使用下列代码。
var supportsDOM2CSS = document.implementation.hasFeature("CSS", "2.0"); var supportsDOM2CSS2 = document.implementation.hasFeature("CSS2", "2.0");12.2.1
多数情况下,都可以通过简单地转换属性名的格式来实现转换。其中一个不能直接转换的CSS 属性
就是float。由于float 是JavaScript 中的保留字,因此不能用作属性名。“DOM2 级样式”规范规定
样式对象上相应的属性名应该是cssFloat;Firefox、Safari、Opera 和Chrome 都支持这个属性,而IE
支持的则是styleFloat。
只要取得一个有效的DOM 元素的引用,就可以随时使用JavaScript 为其设置样式。以下是几个例子。
var myDiv = document.getElementById("myDiv"); //设置背景颜色 myDiv.style.backgroundColor = "red"; //改变大小 myDiv.style.width = "100px"; myDiv.style.height = "200px"; //指定边框 myDiv.style.border = "1px solid black";在以这种方式改变样式时,元素的外观会自动被更新。
<div id="myDiv" style="background-color:blue; width:10px; height:25px"></div>在style 特性中指定的样式信息可以通过下列代码取得。
alert(myDiv.style.backgroundColor); //"blue" alert(myDiv.style.width); //"10px" alert(myDiv.style.height); //"25px"
myDiv.style.cssText = "width: 25px; height: 100px; background-color: green"; alert(myDiv.style.cssText);设置cssText 是为元素应用多项变化最快捷的方式,因为可以一次性地应用所有变化。
for (var i=0, len=myDiv.style.length; i < len; i++){ alert(myDiv.style[i]); //或者myDiv.style.item(i) }无论是使用方括号语法还是使用item()方法,都可以取得CSS 属性名("background-color",
var prop, value, i, len; for (i=0, len=myDiv.style.length; i < len; i++){ prop = myDiv.style[i]; //或者myDiv.style.item(i) value = myDiv.style.getPropertyValue(prop); alert(prop + " : " + value); }getPropertyValue()方法取得的始终都是CSS 属性值的字符串表示。如果你需要更多信息,可
别是:cssText 和cssValueType。其中,cssText 属性的值与getPropertyValue()返回的值相同,
而cssValueType 属性则是一个数值常量,表示值的类型:0 表示继承的值,1 表示基本的值,2 表示
值列表,3 表示自定义的值。以下代码既输出CSS 属性值,也输出值的类型。
var prop, value, i, len; for (i=0, len=myDiv.style.length; i < len; i++){ prop = myDiv.style[i]; //或者myDiv.style.item(i) value = myDiv.style.getPropertyCSSValue(prop); alert(prop + " : " + value.cssText + " (" + value.cssValueType + ")"); }在实际开发中,getPropertyCSSValue()使用得比getPropertyValue()少得多。IE9+、Safarie
虽然style 对象能够提供支持style 特性的任何元素的样式信息,但它不包含那些从其他样式表
层叠而来并影响到当前元素的样式信息。“DOM2 级样式”增强了document.defaultView,提供了
getComputedStyle()方法。这个方法接受两个参数:要取得计算样式的元素和一个伪元素字符串(例
如":after")。如果不需要伪元素信息,第二个参数可以是null。getComputedStyle()方法返回一
个CSSStyleDeclaration 对象(与style 属性的类型相同),其中包含当前元素的所有计算的样式。
以下面这个HTML 页面为例。
<!DOCTYPE html> <html> <head> <title>Computed Styles Example</title> <style type="text/css"> #myDiv { background-color: blue; width: 100px; height: 200px; } </style> </head> <body> <div id="myDiv" style="background-color: red; border: 1px solid black"></div> </body> </html>应用给这个例子中<div>元素的样式一方面来自嵌入式样式表(<style>元素中的样式),另一方
var myDiv = document.getElementById("myDiv"); var computedStyle = document.defaultView.getComputedStyle(myDiv, null); alert(computedStyle.backgroundColor); // "red" alert(computedStyle.width); // "100px" alert(computedStyle.height); // "200px" alert(computedStyle.border); // 在某些浏览器中是"1px solid black"在这个元素计算后的样式中,背景颜色的值是"red",宽度值是"100px",高度值是"200px"。我
返回值。
需要注意的是,即使有些浏览器支持这种功能,但表示值的方式可能会有所区别。
例如,Firefox 和Safari 会将所有颜色转换成RGB 格式(例如红色是rgb(255,0,0))。
因此,在使用getComputedStyle()方法时,最好多在几种浏览器中测试一下。
IE 不支持getComputedStyle()方法,但它有一种类似的概念。在IE 中,每个具有style 属性
的元素还有一个currentStyle 属性。这个属性是CSSStyleDeclaration 的实例,包含当前元素全
部计算后的样式。取得这些样式的方式也差不多,如下面的例子所示。
var myDiv = document.getElementById("myDiv"); var computedStyle = myDiv.currentStyle; alert(computedStyle.backgroundColor); //"red" alert(computedStyle.width); //"100px" alert(computedStyle.height); //"200px" alert(computedStyle.border); //undefined与DOM 版本的方式一样,IE 也没有返回border 样式,因为这是一个综合属性。
的。如果你需要元素具有某个特定的默认值,应该手工在样式表中指定该值。