以前我就是一篇博文 就給出一個(gè)好用的函數(shù),它在我?guī)灼┪闹斜粡V泛運(yùn)用的。最近看了不少東西,于是便有了這篇博文,以梳理我學(xué)到的新東西。
毫無(wú)疑問,基于表現(xiàn)與結(jié)構(gòu)相分離的原則,直接導(dǎo)入一個(gè)新的樣式表是最好的選擇,但有些情況就行不通,如我們做一個(gè)能拖動(dòng)的DIV,從設(shè)置樣式的角度看,就是把它絕對(duì)定位,以防影響原來(lái)的文檔流,然后一點(diǎn)點(diǎn)改變其top與left的值實(shí)現(xiàn)移動(dòng)的效果。由于拖動(dòng)是有時(shí)間概念的,一秒24幀,樣式表不可能面面俱到都把它們寫進(jìn)去。因此動(dòng)態(tài)生成樣式規(guī)則與快速修改樣式規(guī)則是非常有必要的,W3C為此做了大量的工作,在DOM2.0中,擴(kuò)充了不少接口。
退一步說(shuō),表現(xiàn)與結(jié)構(gòu)相分離也不止導(dǎo)入樣式表這一條路。要知道,一共有三種樣式類型,外部樣式,內(nèi)部樣式,與內(nèi)聯(lián)樣式。
- 外部樣式,就是我們上面說(shuō)的那個(gè),寫在一個(gè)獨(dú)立的CSS文件中。
- 內(nèi)部樣式,就是獨(dú)立寫在一個(gè)style標(biāo)簽中,通常是放在head標(biāo)簽中,我最后提供的函數(shù)生成的樣式就是內(nèi)部樣式。
- 內(nèi)聯(lián)樣式,就是寫在元素的style屬性中的樣式。
新添加的接口主要集中在外部樣式中——之所以說(shuō)接口,因?yàn)橄鄳?yīng)的實(shí)現(xiàn)是由瀏覽器方提供的,像IE6那樣傲慢的家伙,從來(lái)無(wú)視它們的存在。
在W3C的模型中,type為"text/css"的link標(biāo)簽與style標(biāo)簽都是代表一個(gè)CSSStyleSheet對(duì)象,我們可以通過(guò)document.styleSheets 獲得當(dāng)前頁(yè)面中所有的CSSStyleSheet對(duì)象,不過(guò)這是一個(gè)集合,非單純的數(shù)組。每一個(gè)CSSStyleSheet對(duì)象擁有如下屬性,
- type:永遠(yuǎn)返回“text/css”字符串。
- disabled:和input的disabled的作用相同,默認(rèn)是false。
- href:返回URL,如果是style標(biāo)簽為null。
- title:返回其title的值,title與普通元素的title無(wú)異,隨你寫什么。
- media:IE與火狐返回的東西并不一致,不太好說(shuō)。media是用來(lái)規(guī)定它擁有的樣式規(guī)則對(duì)什么設(shè)備有效,默認(rèn)是所有。
- ownerRule:返回一個(gè)只讀的CSSRule對(duì)象,如果樣式表是用@import引入的話。
- cssRules: 返回一個(gè)只讀的樣式規(guī)則對(duì)象(CSSStyleRule object)的集合。
樣式規(guī)則對(duì)象(CSSStyleRule object),是W3C為了對(duì)樣式進(jìn)行更細(xì)致的設(shè)定而搞出來(lái)的,如下面這個(gè)東西就是對(duì)應(yīng)一個(gè)樣式規(guī)則對(duì)象:
button[type] { padding:4px 10px 4px 7px; line-height:17px; }
樣式規(guī)則對(duì)象擁有如下幾個(gè)主要屬性:type,cssText,parentStyleSheet,parentRule。
type有點(diǎn)類似節(jié)點(diǎn)的nodeType,對(duì)樣式規(guī)則進(jìn)行細(xì)分,它是用一個(gè)整數(shù)來(lái)表示其類型。具體情況如下
- 0: CSSRule.UNKNOWN_RULE
- 1: CSSRule.STYLE_RULE (定義一個(gè)CSSStyleRule對(duì)象)
- 2: CSSRule.CHARSET_RULE (定義一個(gè)CSSCharsetRule對(duì)象,用于設(shè)定當(dāng)前樣式表的字符集,默認(rèn)與當(dāng)前網(wǎng)頁(yè)相同)
- 3: CSSRule.IMPORT_RULE (定義一個(gè)CSSImportRule對(duì)象,就是用@import引入其他的樣式表)
- 4: CSSRule.MEDIA_RULE (定義一個(gè)CSSMediaRule對(duì)象,用于設(shè)定此樣式是用于顯示器,打印機(jī)還是投影機(jī)等等)
- 5: CSSRule.FONT_FACE_RULE (定義一個(gè)CSSFontFaceRule對(duì)象,CSS3的@font-face)
- 6: CSSRule.PAGE_RULE (定義一個(gè)CSSPageRule對(duì)象)
cssText不用多說(shuō),一個(gè)非常有用的屬性,直接把字符串轉(zhuǎn)換成樣式規(guī)則,無(wú)視各瀏覽器樣式屬性的差異,如cssFloat 和styleFloat。
parentStyleSheet和parentRule都是針對(duì)@import來(lái)說(shuō)的。不過(guò),@import在IE下有問題,我基本不用它。
出處:
責(zé)任編輯:bluehearts
上一頁(yè) 下一頁(yè) 再談動(dòng)態(tài)添加樣式規(guī)則 [2]
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|