關(guān)于DOM2級(jí)CSS樣式的一些小知識(shí)

網(wǎng)上不是有這么個(gè)段子嘛:可怕的是,比你聰明的人比你更勤奮。那么,這里的“勤奮”的差異體現(xiàn)在什么地方呢?就拿這個(gè)getComputedStyle舉例:懶惰青年是看一下,立馬像看見鳳姐一樣視線離開;普通青年是看一下,發(fā)現(xiàn)自己不了解,百一下或谷一下,熟悉了解之;勤奮青年是不僅了解,還抽出時(shí)間實(shí)踐之(如做個(gè)簡(jiǎn)單demo測(cè)試),熟悉方法的特異性,驗(yàn)證一些觀點(diǎn)正確性。 ---來(lái)自張?chǎng)涡癫┛屠锩娴囊欢巍?/p>

逛著博客看到大神張?chǎng)涡竦牟┛屠锩嬗幸陨线@一段話,然后看看手中的JS高程這本書,發(fā)現(xiàn)我也得總結(jié)一些什么吧...雖然有的內(nèi)容在日常開發(fā)中用不到,但是一些框架的底層中卻有可能使用到了。

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

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

任何支持style特性的HTML元素都有對(duì)應(yīng)的一個(gè)style屬性,這個(gè)style屬性是一個(gè)CSSStyleDeclaration的實(shí)例。這個(gè)屬性只包含元素所有通過style特性設(shè)置的樣式信息。

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

通過style屬性設(shè)置樣式的同時(shí)也是動(dòng)態(tài)的改變?cè)氐耐庥^。在標(biāo)準(zhǔn)模式下度量值都是需要設(shè)置單位,在混雜模式下不一定需要,所以我們建議都指定度量單位。

  • DOM樣式屬性和方法

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

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

2.length:表示應(yīng)用給元素CSS屬性的數(shù)量(只計(jì)算style特性中的長(zhǎng)度)
3.parentRule:表示cssRule對(duì)象。
4.getPropertyCssValue(propertyName):返回包含指定屬性值得cssValue對(duì)象。(在chrome下報(bào)錯(cuò)沒有這個(gè)方法)
5.getPropertyValue(propertyName):返回給定屬性的字符串值。(只返回style特性中的樣式)
6.item(index):返回指定位置的Css屬性名稱。
7.removeProperty(propertyName):從樣式特性中刪除指定屬性。
8.setProperty(property, value, priority):將給定屬性設(shè)置為相應(yīng)的值,并加上優(yōu)先權(quán)標(biāo)志。

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

這里要介紹兩個(gè)計(jì)算樣式的屬性方法:

  1. getComputedStyle()方法:
    該方法接受兩個(gè)參數(shù),第一,要取得樣式的元素,第二,設(shè)置為null就可以了。該方法返回的是一個(gè)CSSStyleDeclaration對(duì)象,和style屬性的類型相同。
格式:
document.defaultView.getComputedStyle(element, null)[cssAttr]
window.getComputedStyle(element, null)[cssAttr]
eg:
document.defaultView.getComputedStyle(div, null)['height']
window.getComputedStyle(div, null)['height'] 

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

2.currentStyle屬性
在IE中不支持上面的方法,該屬性也是CSSStyleDeclaration的一個(gè)實(shí)例,包含當(dāng)前元素所有計(jì)算過的屬性。

使用方法
obj.currentStyle['height']
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,825評(píng)論 6 546
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 99,814評(píng)論 3 429
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,980評(píng)論 0 384
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 64,064評(píng)論 1 319
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,779評(píng)論 6 414
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 56,109評(píng)論 1 330
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,099評(píng)論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 43,287評(píng)論 0 291
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,799評(píng)論 1 338
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 41,515評(píng)論 3 361
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,750評(píng)論 1 375
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,221評(píng)論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,933評(píng)論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,327評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,667評(píng)論 1 296
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 52,492評(píng)論 3 400
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,703評(píng)論 2 380

推薦閱讀更多精彩內(nèi)容