關于DOM2級CSS樣式的一些小知識

網(wǎng)上不是有這么個段子嘛:可怕的是,比你聰明的人比你更勤奮。那么,這里的“勤奮”的差異體現(xiàn)在什么地方呢?就拿這個getComputedStyle舉例:懶惰青年是看一下,立馬像看見鳳姐一樣視線離開;普通青年是看一下,發(fā)現(xiàn)自己不了解,百一下或谷一下,熟悉了解之;勤奮青年是不僅了解,還抽出時間實踐之(如做個簡單demo測試),熟悉方法的特異性,驗證一些觀點正確性。 ---來自張鑫旭博客里面的一段。

逛著博客看到大神張鑫旭的博客里面有以上這一段話,然后看看手中的JS高程這本書,發(fā)現(xiàn)我也得總結一些什么吧...雖然有的內容在日常開發(fā)中用不到,但是一些框架的底層中卻有可能使用到了。

在HTML中定義樣式有三種方法:外部樣式表,嵌入樣式表,內聯(lián)樣式。在DOM2級樣式中圍繞這三種方式提供了一套API。首先要知道新的東西在各種版本的瀏覽器上是會存在兼容性問題。所以提供一種檢測瀏覽器是否支持DOM2級別的CSS能力:

var support = document.implementation.hasFeature('CSS', '2.0') //返回true或者false
一、訪問元素的樣式

任何支持style特性的HTML元素都有對應的一個style屬性,這個style屬性是一個CSSStyleDeclaration的實例。這個屬性只包含元素所有通過style特性設置的樣式信息。

注意:float屬性在JavaScript中是一個關鍵字,所以我們需要用另一種形式表現(xiàn),在IE中是通過styleFloat表示,其他瀏覽器中是通過cssFloat表示。

通過style屬性設置樣式的同時也是動態(tài)的改變元素的外觀。在標準模式下度量值都是需要設置單位,在混雜模式下不一定需要,所以我們建議都指定度量單位。

  • DOM樣式屬性和方法

在DOM2規(guī)范中為style對象定義了一些屬性和方法。
1.cssText:可以通過這個屬性訪問style特性中的css代碼。也可以通過它進行設置樣式代碼;

obj.style.cssText='width:100px;height:100px' 
可以看到這個屬性可以一次設置多個樣式,這樣比一個個設置方便了很多

2.length:表示應用給元素CSS屬性的數(shù)量(只計算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):將給定屬性設置為相應的值,并加上優(yōu)先權標志。

注意:
1.cssText可以返回style特性中css代碼的內部表示,可以設置style特性的值,不過這個設置會覆蓋它已有的style的值。
2.getPropertyCssValue會返回包含兩個cssValue對象,這兩個屬性分別是cssText和cssValueType,cssText返回的就是樣式的值,但是cssValueType返回的是一個數(shù)量值,0表示是繼承而來的,1表示是基本的值,2表示值列表,3表示自定義的值。
  • 計算的樣式

這里要介紹兩個計算樣式的屬性方法:

  1. getComputedStyle()方法:
    該方法接受兩個參數(shù),第一,要取得樣式的元素,第二,設置為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
對象之中。根據(jù)DennisHall的說法,使用defaultView
可能一是人們不太樂意在window上專門寫個東西,二是讓API在Java中也可用(這我不懂,忘指點~~)。---來自張鑫旭

2.currentStyle屬性
在IE中不支持上面的方法,該屬性也是CSSStyleDeclaration的一個實例,包含當前元素所有計算過的屬性。

使用方法
obj.currentStyle['height']
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容