日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

getComputedStyle方法的那些事

發(fā)布時(shí)間:2023/12/6 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 getComputedStyle方法的那些事 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、getComputedStyle是?
getComputedStyle是一個(gè)可以獲取當(dāng)前元素所有最終使用的CSS屬性值。返回的是一個(gè)CSS樣式聲明對(duì)象([object CSSStyleDeclaration]),只讀。

getComputedStyle() gives the final used values of all the CSS properties of an element.

語(yǔ)法如下:

var style = window.getComputedStyle("元素", "偽類");
例如:

var dom = document.getElementById("test"),

style = window.getComputedStyle(dom , ":after");

就兩個(gè)參數(shù),大家都懂中文的,沒(méi)什么好說(shuō)的。只是額外提示下:Gecko 2.0 (Firefox 4 / Thunderbird 3.3 / SeaMonkey 2.1) 之前,第二個(gè)參數(shù)“偽類”是必需的(如果不是偽類,設(shè)置為null),不過(guò)現(xiàn)在嘛,不是必需參數(shù)了。

二、getComputedStyle與style的區(qū)別
我們使用element.style也可以獲取元素的CSS樣式聲明對(duì)象,但是其與getComputedStyle方法還有有一些差異的。

只讀與可寫(xiě)
正如上面提到的getComputedStyle方法是只讀的,只能獲取樣式,不能設(shè)置;而element.style能讀能寫(xiě),能屈能伸。
獲取的對(duì)象范圍
getComputedStyle方法獲取的是最終應(yīng)用在元素上的所有CSS屬性對(duì)象(即使沒(méi)有CSS代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來(lái));而element.style只能獲取元素style屬性中的CSS樣式。因此對(duì)于一個(gè)光禿禿的元素<p>,getComputedStyle方法返回對(duì)象中l(wèi)ength屬性值(如果有)就是190+(據(jù)我測(cè)試FF:192, IE9:195, Chrome:253, 不同環(huán)境結(jié)果可能有差異), 而element.style就是0。
三、getComputedStyle與defaultView
如果我們查看jQuery源代碼,會(huì)發(fā)現(xiàn),其css()方法實(shí)現(xiàn)不是使用的window.getComputedStyle而是document.defaultView.getComputedStyle,唷?這是怎么一回事?
jQuery源碼使用document.defaultView.getComputedStyle截圖證明

實(shí)際上,使用defaultView基本上是沒(méi)有必要的,getComputedStyle本身就存在window對(duì)象之中。根據(jù)DennisHall的說(shuō)法,使用defaultView可能一是人們不太樂(lè)意在window上專門寫(xiě)個(gè)東西,二是讓API在Java中也可用(這我不懂,忘指點(diǎn)~~)。

不過(guò)有個(gè)特殊情況,在FireFox3.6上不使用defaultView方法就搞不定的,就是訪問(wèn)框架(frame)的樣式.

四、getComputedStyle兼容性
對(duì)于桌面設(shè)備:

Chrome Firefox (Gecko) Internet Explorer Opera Safari

基本支持 支持 支持 9 支持 支持
偽類元素支持 支持 支持 不支持 不支持 支持
對(duì)于手機(jī)設(shè)備:

Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile

基本支持 支持 支持 WP7 Mango 支持 支持
偽元素支持 ? ? 不支持 ? ?
上面打問(wèn)號(hào)的表示沒(méi)有測(cè)試,是否兼容不知。如果您方便測(cè)試,歡迎將測(cè)試結(jié)果告知,這里將及時(shí)更新,并附上您的姓名,以謝您做的貢獻(xiàn)。

我們先把注意力放在桌面設(shè)備上,可以看到,getComputedStyle方法IE6~8是不支持的,得,背了半天的媳婦,發(fā)現(xiàn)是孫悟空變的——郁悶了。不急,IE自有自己的一套東西。

五、getComputedStyle與currentStyle
currentStyle是IE瀏覽器自?shī)首詷?lè)的一個(gè)屬性,其與element.style可以說(shuō)是近親,至少在使用形式上類似,element.currentStyle,差別在于element.currentStyle返回的是元素當(dāng)前應(yīng)用的最終CSS屬性值(包括外鏈CSS文件,頁(yè)面中嵌入的<style>屬性等)。

因此,從作用上將,getComputedStyle方法與currentStyle屬性走的很近,形式上則style與currentStyle走的近。不過(guò),currentStyle屬性貌似不支持偽類樣式獲取,這是與getComputedStyle方法的差異,也是jQuery css()方法無(wú)法體現(xiàn)的一點(diǎn)。

//zxx: 如果你只知jQuery css()方法,你是不會(huì)知道偽類樣式也是可以獲取的,雖然部分瀏覽器不支持。

例如,我們要獲取一個(gè)元素的高度,可以類似下面的代碼:

alert((element.currentStyle? element.currentStyle : window.getComputedStyle(element, null)).height);
您可以狠狠地點(diǎn)擊這里:使用getComputedStyle和currentStyle 獲取元素高度demo

結(jié)果FireFox下顯示24px(經(jīng)過(guò)計(jì)算了), 而IE瀏覽器下則是CSS中的2em屬性值:
Firefox下顯示的計(jì)算后的24px值 張?chǎng)涡?鑫空間-鑫生活 IE9下顯示的CSS中的2em值 張?chǎng)涡?鑫空間-鑫生活

getComputedStyle方法與currentStyle屬性其他具體差異還有很多,我以一個(gè)普通按鈕做元素,遍歷了其中靠譜的屬性名和屬性值,您可以狠狠地點(diǎn)擊這里:getComputedStyle和currentStyle屬性展示demo

仔細(xì)對(duì)比查看,我們可以看到不少差異,例如浮動(dòng)屬性,FireFox瀏覽器下是這個(gè)(cssFloat):
FireFox下的浮動(dòng)屬性名

IE7瀏覽器下則是styleFloat :
IE7瀏覽器下的styleFloat屬性 張?chǎng)涡?鑫空間-鑫生活

而IE9瀏覽器下則是cssFloat和styleFloat都有。

等其他N多差異。

六、getPropertyValue方法
getPropertyValue方法可以獲取CSS樣式申明對(duì)象上的屬性值(直接屬性名稱),例如:

window.getComputedStyle(element, null).getPropertyValue("float");
如果我們不使用getPropertyValue方法,直接使用鍵值訪問(wèn),其實(shí)也是可以的。但是,比如這里的的float,如果使用鍵值訪問(wèn),則不能直接使用getComputedStyle(element, null).float,而應(yīng)該是cssFloat與styleFloat,自然需要瀏覽器判斷了,比較折騰!

使用getPropertyValue方法不必可以駝峰書(shū)寫(xiě)形式(不支持駝峰寫(xiě)法),例如:style.getPropertyValue("border-top-left-radius");

兼容性
getPropertyValue方法IE9+以及其他現(xiàn)代瀏覽器都支持,見(jiàn)下表:

Chrome Firefox (Gecko) Internet Explorer Opera Safari

基本支持 支持 支持 9 支持 支持
OK,一涉及到兼容性問(wèn)題(IE6-8腫么辦),感覺(jué)頭開(kāi)始微微作痛了~~,不急,IE自由一套自己的套路,就是getAttribute方法。

七、getPropertyValue和getAttribute
在老的IE瀏覽器(包括最新的),getAttribute方法提供了與getPropertyValue方法類似的功能,可以訪問(wèn)CSS樣式對(duì)象的屬性。用法與getPropertyValue類似:

style.getAttribute("float");
注意到?jīng)],使用getAttribute方法也不需要cssFloat與styleFloat的怪異寫(xiě)法與兼容性處理。不過(guò),還是有一點(diǎn)差異的,就是屬性名需要駝峰寫(xiě)法,如下:

style.getAttribute("backgroundColor");
如果不考慮IE6瀏覽器,貌似也是可以這么寫(xiě):

style.getAttribute("background-color");
實(shí)例才是王道,您可以狠狠地點(diǎn)擊這里:getPropertyValue和getAttribute獲取背景色demo

結(jié)果FireFox下一如既往的rgb顏色返回(Chrome也是返回rgb顏色):
FireFox瀏覽器下一如既往的RGB顏色返回 張?chǎng)涡?鑫空間-鑫生活

對(duì)于IE9瀏覽器,雖然應(yīng)用的是currentStyle, 但是從結(jié)果上來(lái)講,currentStyle返回的對(duì)象是完全支持getPropertyValue方法的。

八、getPropertyValue和getPropertyCSSValue
從長(zhǎng)相上看getPropertyCSSValue與getPropertyValue是近親,但實(shí)際上,getPropertyCSSValue要頑劣的多。

getPropertyCSSValue方法返回一個(gè)CSS最初值(CSSPrimitiveValue)對(duì)象(width, height, left, …)或CSS值列表(CSSValueList)對(duì)象(backgroundColor, fontSize, …),這取決于style屬性值的類型。在某些特別的style屬性下,其返回的是自定義對(duì)象。該自定義對(duì)象繼承于CSSValue對(duì)象(就是上面所說(shuō)的getComputedStyle以及currentStyle返回對(duì)象)。

getPropertyCSSValue方法兼容性不好,IE9瀏覽器不支持,Opera瀏覽器也不支持(實(shí)際支持,只是老是拋出異常)。而且,雖然FireFox中,style對(duì)象支持getPropertyCSSValue方法,但總是返回null. 因此,目前來(lái)講,getPropertyCSSValue方法可以先不聞不問(wèn)。

九、補(bǔ)充~結(jié)語(yǔ)
有了jQuery等優(yōu)秀庫(kù),我們有熟悉底層的getComputedStyle方法的必要嗎?

實(shí)際上,本文一直沒(méi)有深入展開(kāi)getComputedStyle方法一個(gè)很重要的,類似css()方法沒(méi)有的功能——獲取偽類元素樣式。但從這一點(diǎn)上將,熟悉getComputedStyle方法有必要。
本文轉(zhuǎn)載之張?chǎng)涡竦牟┛?/p>

總結(jié)

以上是生活随笔為你收集整理的getComputedStyle方法的那些事的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。