CSS變數的各種玩法!!

2021-06-28 19:46:48 字數 2419 閱讀 1549

css很美妙,能夠為您的頁面穿上衣裳,各種各樣五彩斑斕的衣裳,但是對於開發者來說,他又不夠靈動,於是乎有了各種各樣的預處理器sass、less、stylus(筆者建議sass的scss語法),這些預處理器可以很大程度的提高css的靈活性,增強css的**組織與維護。但是畢竟不是親生的,然後負責css開發的那些大牛們坐不住了,開始給css賦予一些新的特性,本文就來**下css變數的進展與應用。 

w3c的關於css變數的最新探索體現在css custom properties for cascading variables module level 1中,最新更新在2023年5月6日,目前為工作草案,所以本文章只為研究探索只用,所涉知識點存在修改的風險,w3c修改之後本文會同步更新。

我們知道,乙個**或應用往往包含大量的css,這些css裡的一些屬性值往往重複使用,比如**使用的顏色體系,背景色、文字顏色、鏈結顏色等,這些重複使用的屬性值散落在大量的css文件中,如果需要修改其中的一些值,例如改版顏色,那簡直是個噩夢,我們需要每個檔案進行查詢、替換,眼花繚亂、機械重複的大量操作難免出錯、難免頭大,所以css**的組織與維護已經成了困擾css使用的重要瓶頸。 

當然,css預處理可以有效的解決這些問題,預處理器的使用已經成了事實上的行業標準,sass正成為越來越多前端er的選擇。但是,我們需要部署編譯環境、需要讓開發工具支援sass等,需要一些額外的工作。遇事不免暢想,如果有一天,我們可以像使用普通css那些使用預處理器? 

於是便有了w3c的css various。

關於變數,不外乎定義和使用,接下來我們分別解析。

我們把需要重複使用的值存放到乙個自定義的屬性中,這個自定義的屬性用雙虛線開頭標識,如下面**所示。

/* 變數定義 */

:root

/* 變數使用 */

#foo

h1

變數名

自定義屬性名和變數名遵循css識別符號的定義規則,可以包含字母數字(a-z,a-z,0-9)、iso 10646字元列表的u+00a0及以上字元、下劃線(_)、連字元(-)等,不能以數字、連字元+數字、雙連字元開始。 

css變數語法中,大小寫敏感,可以包含字母、數字、下劃線、連字元,且最好不以數字、連字元開頭。

/* 正確的變數名 */

:root

/* 下面兩個變數都有效,表示兩個變數 */

:element

變數值可以接受任何符合語法的值,它的預設值為」 「,但是不能為」「,否則會報錯。

變數的繼承和覆蓋

變數的宣告和使用遵循css的層疊特性,類似於普通程式語言裡面的變數作用域。請看下面的**。

:root

div#alert

* iinherited

blue

from

theroot

element!p>

igotgreen

setdirectly

onme!div>

id='alert'>

while

igot

redset

directly

onme!

i』mred

too, because

ofinheritance!p>

div>我們可以通過var()的方式使用變數,但是不能在屬性名、選擇器中使用變數,只能在屬性值中使用變數,使用變數的語法如下所示。

/* * var()接受兩個引數,自定義屬性名(變數名)、預設值

* 第乙個引數custom-property-name呼叫變數

* 第二引數可選,指定自定義變數無效時的預設值。

*/var() = var( [, ]? )

/* for example */

/* in the component』s style: */

.component

.header

.component

.text

.component

我們可以巢狀呼叫css變數。

/*one example */

:root

/*another example */

two>one>

onetwo

three

對於前端開發者來說,相容幷包永遠是乙個難以企及的痛,作為乙個具有「極客思維」的前端er,我們還是要努力。 

首先來看看,css變數目前的慘不忍睹的相容性,如下圖所示,資料來自caniuse。 

全線飄紅有木有,只有firefox認識,還怎麼玩。 

有兄弟說,我就要任性,就要玩怎麼辦?老外寫了個補丁(polyfill),大家不妨一試。

js型別轉換的各種玩法

前言 對於object和number string boolean之間的轉換關係 toprimitive是指轉換為js內部的原始值,如果是非原始值則轉為原始值,呼叫valueof 和tostring 來實現。valueof返回物件的值 在控制台,當你定義乙個物件按回車,控制台列印的是object,t...

js型別轉換的各種玩法

前言 對於object和number string boolean之間的轉換關係 toprimitive是指轉換為js內部的原始值,如果是非原始值則轉為原始值,呼叫valueof 和tostring 來實現。valueof返回物件的值 在控制台,當你定義乙個物件按回車,控制台列印的是object,t...

js型別轉換的各種玩法

前言 對於object和number string boolean之間的轉換關係 toprimitive是指轉換為js內部的原始值,如果是非原始值則轉為原始值,呼叫valueof 和tostring 來實現。valueof返回物件的值 在控制台,當你定義乙個物件按回車,控制台列印的是object,t...