語法以下:css
var style = window.getComputedStyle("元素", "僞類");
例如:java
var dom = document.getElementById("test"), style = window.getComputedStyle(dom , ":after");
注意:Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) 以前,第二個參數「僞類」是必需的(若是不是僞類,設置爲null
)。如今,不是必需參數了。瀏覽器
二: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 與 defaultView
若是咱們查看jQuery源代碼,會發現,其css()
方法實現不是使用的 window.getComputedStyle
而是 document.defaultView.getComputedStyle,what's all this about
?dom
實際上,使用defaultView
基本上是沒有必要的,getComputedStyle
自己就存在window
對象之中。ide
不過有個特殊狀況,在FireFox3.6上不使用defaultView
方法就搞不定的,就是訪問框架(frame)的樣式.post
四:getComputedStyle兼容性
getComputedStyle
方法IE6~8是不支持的。不過,IE自有本身的一套東西。接下來就介紹的currentStyle就是了 => =>
五:getComputedStyle 與 currentStyle
currentStyle
是IE瀏覽器的一個屬性,其與element.style
能夠說是近親,至少在使用形式上相似。差異在於element.currentStyle
返回的是元素當前應用的最終CSS屬性值(包括外鏈CSS文件,頁面中嵌入的<style>
屬性等)。所以,從做用上將,getComputedStyle
方法與currentStyle
屬性走的很近,形式上則style
與currentStyle
走的近。不過,currentStyle
屬性貌似不支持僞類樣式獲取,這是與getComputedStyle
方法的差別,也是jQuery css()
方法沒法體現的一點。測試
getComputedStyle 和 currentStyle 仍是有不少區別的:this
例如,咱們要獲取一個元素的高度,能夠相似下面的代碼:
alert((element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height);
結果FireFox下顯示24px
(通過計算了), 而IE瀏覽器下則是CSS中的2em
屬性值。
getComputedStyle
方法與 currentStyle
屬性其餘具體差別還有不少
6、getPropertyValue方法
getPropertyValue
方法能夠獲取CSS樣式申明對象上的屬性值(直接屬性名稱),例如:
window.getComputedStyle(element, null).getPropertyValue("float");
若是咱們不使用getPropertyValue
方法,直接使用鍵值訪問,其實也是能夠的。可是,好比這裏的的float
,若是使用鍵值訪問,則不能直接使用getComputedStyle(element, null).float
,而應該是cssFloat
與styleFloat
,天然須要瀏覽器判斷了,比較折騰!
使用getPropertyValue
方法沒必要能夠駝峯書寫形式(不支持駝峯寫法),例如:style.getPropertyValue("border-top-left-radius")
;
兼容性getPropertyValue
方法IE9+以及其餘現代瀏覽器都支持。OK,一涉及到兼容性問題(IE6-8腫麼辦),不急,IE自由一套本身的套路,就是getAttribute
方法。
7、getPropertyValue 和 getAttribute
在老的IE瀏覽器(包括最新的),getAttribute
方法提供了與getPropertyValue
方法相似的功能,能夠訪問CSS樣式對象的屬性。用法與getPropertyValue
相似:
style.getAttribute("float");
注意到沒,使用getAttribute
方法也不須要cssFloat
與styleFloat
的怪異寫法與兼容性處理。不過,仍是有一點差別的,就是屬性名須要駝峯寫法,以下:
style.getAttribute("backgroundColor");
若是不考慮IE6瀏覽器,貌似也是能夠這麼寫:
style.getAttribute("background-color");
8、getPropertyValue 和 getPropertyCSSValue
從長相上看getPropertyCSSValue
與getPropertyValue
是近親,但實際上,getPropertyCSSValue
要頑劣的多。
getPropertyCSSValue
方法返回一個CSS最初值(CSSPrimitiveValue)對象(width, height, left, …)或CSS值列表(CSSValueList)對象(backgroundColor, fontSize, …),這取決於style
屬性值的類型。在某些特別的style屬性下,其返回的是自定義對象。該自定義對象繼承於CSSValue對象(就是上面所說的getComputedStyle
以及currentStyle
返回對象)。
getPropertyCSSValue
方法兼容性很差,IE9瀏覽器不支持,Opera瀏覽器也不支持(實際支持,只是總是拋出異常)。並且,雖然FireFox中,style
對象支持getPropertyCSSValue
方法,但老是返回null
. 所以,目前來說,getPropertyCSSValue
方法能夠先漠不關心。