摘要:在像這種聲明式語言中,隨著時間而改變的值并不存在,也就沒有所謂變量的概念了。引入了一種層級變量的概念,從而能夠從容應(yīng)對可維護(hù)性的挑戰(zhàn)。可以被使用在任意的地方。
CSS變量能幫助我們干什么
在一些命令式編程語言中,像Java、C++亦或是JavaScript,通過變量我們能夠跟蹤某些狀態(tài)。變量是一種符號,關(guān)聯(lián)著一個特定的值,變量的值能隨著時間的推移而改變。一、什么是CSS變量
在像CSS這種聲明式語言中,隨著時間而改變的值并不存在,也就沒有所謂變量的概念了。
CSS 引入了一種層級變量的概念,從而能夠從容應(yīng)對可維護(hù)性的挑戰(zhàn)。這就會使得在整個 CSS tree 中都可以象征性的引用一個變量
CSS 變量當(dāng)前有兩種形式:
變量,就是擁有合法標(biāo)識符和合法的值。可以被使用在任意的地方??梢允褂胿ar()函數(shù)使用變量。例如:var(--example-variable)會返回--example-variable所對應(yīng)的值
自定義屬性。這些屬性使用--where的特殊格式作為名字。例如--example-variable: 20px;即使一個css聲明語句。意思是將20px賦值給--example-varibale變量
變量聲明使用兩根連詞線--表示變量,$color是屬于Sass的語法,@color是屬于Less的語法,為避免沖突css原生變量使用--)
注意: 變量名大小寫敏感,--header-color和--Header-Color是兩個不同變量
CSS變量聲明的方式非常簡單,如下,聲明了一個名叫color的CSS變量。
在css文件中寫
寫在html標(biāo)簽的inline-style里
用JS給某個元素聲明,方法.style.setProperty
body{ --color: red; } document.getElementsByTagName("body")[0].style.setProperty("--color", "red")
如果變量值是一個字符串,可以與其他字符串拼接
--bar: "hello"; --foo: var(--bar)" world"; body:after { content: "--screen-category : "var(--screen-category); }
如果變量值是數(shù)值,不能與數(shù)值單位直接連用,必須使用calc()函數(shù),將它們連接
.foo { --gap: 20; /* 無效 */ margin-top: var(--gap)px; } .foo { --gap: 20; margin-top: calc(var(--gap) * 1px); }
如果變量值帶有單位,就不能寫成字符串
/* 無效 */ .foo { --foo: "20px"; font-size: var(--foo); } /* 有效 */ .foo { --foo: 20px; font-size: var(--foo);
注意: 變量值只能用作屬性值,不能用作屬性名
.foo { --side: margin-top; /* 無效 */ var(--side): 20px; }
上面代碼中,變量--side用作屬性名,這是無效的
三、CSS變量的繼承&作用域自定義屬性同樣支持繼承。一個元素上沒有定義自定義屬性,該自定義屬性的值會繼承其父元素
class="one">定義下面的CSS:
.two { --test: 10px; } .three { --test: 2em; }在這個例子中,var(--test)的結(jié)果是:
class="two" 對應(yīng)的節(jié)點: 10px
class="three" 對應(yīng)的節(jié)點: element: 2em
class="four" 對應(yīng)的節(jié)點: 10px (inherited from its parent)
class="one" 對應(yīng)的節(jié)點: 無效值, 即此屬性值為未被自定義css變量覆蓋的默認(rèn)值
最頂層的作用域就是:root
四、響應(yīng)式div { --color: #7F583F; --bg: #F7EFD2; } .mediabox { color: var(--color); background: var(--bg); } @media screen and (min-width: 768px) { body { --color: #F7EFD2; --bg: #7F583F; } }五、與預(yù)處理器的不同1、預(yù)處理器變量不是實時的
$color:#7F583F; @media screen and (min-width: 768px) { $color: #F7EFD2; } .mediabox { background: $color; }編譯結(jié)果
.mediabox { background: #7F583F; }2、預(yù)處理器不能限定作用域
$zcolor:blue; .ulbox { $zcolor:red; } ul{ color: $zcolor; }編譯為
ul { color: blue; }3、預(yù)處理器變量不可互操作
原生的CSS自定義屬性可以與任何CSS預(yù)處理器或純CSS文件一起使用
六、JS操作變量CSS 變量可以和 JS 互相交互
:root{ --testMargin:70px; } // 讀取 var root = getComputedStyle(document.documentElement); var cssVariable1 = root.getPropertyValue("--testMargin").trim(); console.log(cssVariable1); // "70px" // 寫入 document.documentElement.style.setProperty("--testMargin", "100px"); var cssVariable2 = root.getPropertyValue("--testMargin").trim(); console.log(cssVariable2); // "100px" // 刪除 document.documentElement.style.removeProperty("--testMargin"); var cssVariable3 = root.getPropertyValue("--testMargin").trim(); console.log(cssVariable3); // "70px"七、兼容性檢測瀏覽器是否支持CSS自定義屬性的方法
/*css*/ @supports ( (--a: 0)) { /* supported */ } @supports ( not (--a: 0)) { /* not supported */ } // Js if (window.CSS && window.CSS.supports && window.CSS.supports("--a", 0)) { alert("CSS properties are supported"); } else { alert("CSS properties are NOT supported"); }https://caniuse.com/#search=c...
總結(jié)相較于傳統(tǒng)的 LESS 、SASS 等預(yù)處理器變量,CSS 變量的優(yōu)點在于:
CSS 變量的動態(tài)性,能在頁面運行時更改,而傳統(tǒng)預(yù)處理器變量編譯后無法更改
CSS 變量能夠繼承,能夠組合使用,具有作用域
配合 Javascript 使用,可以方便的從 JS 中讀/寫
參考
CSS 變量教程
使用CSS變量
CSS變量和預(yù)處理器變量的差異文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/113555.html
摘要:是一個和差不多同時代的產(chǎn)物,但是它只支持基于,對于來說只能興嘆了。找一個自己順手的就好,順便一提,我現(xiàn)在主要使用輔助。 說到自動化構(gòu)建,你想到了什么?基于AMD的requirejs?還是基于commoJS的browserify?他們都在各自的領(lǐng)域或者說時代發(fā)揮了很重要的作用。但是時代的變遷,webpack成了現(xiàn)在的佼佼者,我們不知道什么時候wepback也會被取代,但是現(xiàn)在我們必須要掌...
摘要:需要有一定的基礎(chǔ)和的使用經(jīng)驗。這就是屬性的作用。方法接收一個新對象來重新賦值。也接收一個函數(shù),這個回調(diào)函數(shù)這里我默認(rèn)有一個參數(shù),表示之前的的值,這個函數(shù)的返回值就是最新的。但是不同的是在組件內(nèi)部是只讀的。 前言 寫這篇文章的主要目標(biāo)是讓初學(xué)者更快的上手 React 的項目開發(fā),能有一個循循漸進(jìn)的理解過程。需要有一定的 JavaScript 基礎(chǔ)和 NPM 的使用經(jīng)驗。不多說了,下面會按...
摘要:案例說明使用原生完成桌面操作級應(yīng)用,對于原生的掌握情況而言,是一個較為全面的綜合型案例。本次課從事件相關(guān)的功能入手,給大家?guī)碓敿?xì)的分享。 showImg(https://segmentfault.com/img/bVbh1qw); 案例說明:使用原生 JS 完成桌面操作級應(yīng)用,對于原生 JS 的掌握情況而言,是一個較為全面的綜合型案例。本次課從事件(event)相關(guān)的功能入手,給大家...
摘要:新手坑開發(fā)環(huán)境和生產(chǎn)環(huán)境樣式不一致的問題上次提到作用域問題導(dǎo)致樣是不生效這次講的是我之前遇到的一個小坑稍不留神就完蛋前陣子做的一個小項目引入了的庫外加自己寫的很多樣式在開發(fā)環(huán)境下測試完美直接就出來上正式環(huán)境發(fā)現(xiàn)竟然有多處樣式未生效的問題還好 [新手坑] 02.Vue開發(fā)環(huán)境和生產(chǎn)環(huán)境樣式不一致的問題 上次提到作用域問題, 導(dǎo)致樣是不生效, 這次講的是我之前遇到的一個小坑, 稍不留神就完...
閱讀 3513·2021-10-08 10:04
閱讀 863·2019-08-30 15:54
閱讀 2180·2019-08-29 16:09
閱讀 1346·2019-08-29 15:41
閱讀 2272·2019-08-29 11:01
閱讀 1734·2019-08-26 13:51
閱讀 1025·2019-08-26 13:25
閱讀 1806·2019-08-26 13:24