CSS變量用法及與js交互

瀏覽器支持情況

主要瀏覽器基本支持缔莲,移動端開發(fā)、混合開發(fā)霉旗、微信開發(fā)都可以考慮酌予。

什么是CSS變量?

CSS變量(CSS variables)奖慌,官方稱為CSS 自定義屬性(CSS custom properties)抛虫。

CSS變量和預(yù)處理器中的變量有什么不同?

你可能已經(jīng)在CSS預(yù)處理器中嘗試過使用變量而帶來的好處了简僧,比如SassLess建椰。

預(yù)處理器讓你能設(shè)置變量,以及在函數(shù)岛马、循環(huán)棉姐、數(shù)學(xué)計算等等地方中使用它們屠列。這是否意味著CSS變量已經(jīng)無關(guān)緊要了呢囊咏?

那可未必抚恒,主要是因為,CSS變量與預(yù)處理器中的變量其實是不同的東西咐蚯。

這些不同基于一個事實:CSS變量是瀏覽器中直接可用的CSS屬性乃坤,而預(yù)處理中的變量是用于編譯成常規(guī)的CSS代碼苛让,瀏覽器其實對它們一無所知。

這意味著湿诊,你可以在樣式表中狱杰,在內(nèi)聯(lián)樣式中,在SVG的標(biāo)簽中直接更新CSS變量厅须,甚至可以在運行時用JavaScript直接修改它仿畸。而你是無法對預(yù)處理器中的變量做上面這些操作的。CSS 變量提供了 JavaScript 與 CSS 通信的一種途徑朗和。

不是說你必須要在兩者間做出選擇:沒有什么東西限制你错沽,你可以同時使用CSS變量和預(yù)處理變量,并享有它們各自帶來的巨大好處眶拉。

三甥捺、CSS變量用法

1、變量的聲明

聲明變量的時候镀层,變量名前面要加兩根連詞線(--)镰禾。

你可能會問,為什么選擇兩根連詞線(--)表示變量唱逢?因為$title-color被 Sass 用掉了吴侦,@title-color被 Less 用掉了。為了不產(chǎn)生沖突坞古,官方的 CSS 變量就改用兩根連詞線了备韧。

變量名大小寫敏感,--title-color和--Title-Color是兩個不同變量痪枫。

2织堂、變量的讀取

var()函數(shù)用來讀取變量,函數(shù)還可以使用第二個參數(shù)奶陈,表示變量的默認值易阳。如果該變量不存在,就會使用這個默認值吃粒。

var()函數(shù)還可以用在變量的聲明潦俺。

變量值只能用作屬性值,不能用作屬性名。

3事示、變量值的類型

如果變量值是一個字符串早像,可以與其他字符串拼接。

如果變量值是數(shù)值肖爵,不能與數(shù)值單位直接連用卢鹦。

數(shù)值與單位直接寫在一起,這是無效的劝堪。必須使用calc()函數(shù)冀自,將它們連接。

如果變量值帶有單位幅聘,就不能寫成字符串凡纳。

4窃植、作用域

全局變量?:root偽類可以看做是一個全局作用域帝蒿,在里面聲明的變量,他下面的所有選擇器都可以拿到

局部變量

CSS變量的繼承(就近原則)巷怜。同一個 CSS 變量葛超,可以在多個選擇器內(nèi)聲明。讀取的時候延塑,優(yōu)先級最高的聲明生效绣张。這與 CSS 的"層疊"(cascade)規(guī)則是一致的。

5关带、響應(yīng)式布局

CSS 是動態(tài)的侥涵,頁面的任何變化,都會導(dǎo)致采用的規(guī)則變化宋雏。

利用這個特點芜飘,可以在響應(yīng)式布局的media命令里面聲明變量,使得不同的屏幕寬度有不同的變量值磨总。

6嗦明、兼容性處理

對于不支持 CSS 變量的瀏覽器,可以采用下面的寫法蚪燕,也可以使用@support命令進行檢測娶牌。

7、JavaScript 操作及與CSS變量的交互

JavaScript 也可以檢測瀏覽器是否支持 CSS 變量馆纳。

JavaScript 可以操作 CSS 變量诗良。

JavaScript 可以將任意值存入樣式表。下面是一個監(jiān)聽事件的例子鲁驶,事件信息被存入 CSS 變量累榜。

對 CSS 無用的信息,也可以放入 CSS 變量,這意味著壹罚,可以把樣式設(shè)置寫在 CSS 變量中葛作,讓 JavaScript 讀取。

補充知識

calc() 函數(shù)用于動態(tài)計算長度值猖凛。

需要注意的是赂蠢,運算符前后都需要保留一個空格,例如:width: calc(100% - 10px)辨泳;

任何長度值都可以使用calc()函數(shù)進行計算虱岂;

calc()函數(shù)支持 "+", "-", "*", "/" 運算;

calc()函數(shù)使用標(biāo)準(zhǔn)的數(shù)學(xué)運算優(yōu)先級規(guī)則菠红;

表達式中有“*”和“/”時第岖,其前后可以沒有空格,但建議留有空格试溯。

比如說“width:calc(50% + 10px)”蔑滓,這樣一來你就不用考慮元素DIV的寬度值到底是多少,而把這個任務(wù)交由瀏覽器去計算遇绞。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末键袱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摹闽,更是在濱河造成了極大的恐慌蹄咖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件付鹿,死亡現(xiàn)場離奇詭異澜汤,居然都是意外死亡,警方通過查閱死者的電腦和手機舵匾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門俊抵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纽匙,你說我怎么就攤上這事务蝠。” “怎么了烛缔?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵馏段,是天一觀的道長。 經(jīng)常有香客問我践瓷,道長院喜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任晕翠,我火速辦了婚禮喷舀,結(jié)果婚禮上砍濒,老公的妹妹穿的比我還像新娘。我一直安慰自己硫麻,他們只是感情好爸邢,可當(dāng)我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拿愧,像睡著了一般杠河。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浇辜,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天券敌,我揣著相機與錄音,去河邊找鬼柳洋。 笑死待诅,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的熊镣。 我是一名探鬼主播卑雁,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轧钓!你這毒婦竟也來了序厉?” 一聲冷哼從身側(cè)響起锐膜,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤毕箍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后道盏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體而柑,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年荷逞,在試婚紗的時候發(fā)現(xiàn)自己被綠了媒咳。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡种远,死狀恐怖涩澡,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坠敷,我是刑警寧澤妙同,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站膝迎,受9級特大地震影響粥帚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜限次,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一芒涡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦费尽、人聲如沸赠群。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乎串。三九已至,卻和暖如春速警,著一層夾襖步出監(jiān)牢的瞬間叹誉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工闷旧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留长豁,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓忙灼,卻偏偏與公主長得像匠襟,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子该园,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,786評論 2 345