CSS變數能幫助我們做什麼
在一些命令式程式語言中,像是Java、C 亦然或是JavaScript,透過變數我們能夠追蹤某些狀態。變數是一種符號,關聯著一個特定的值,變數的值能隨著時間的推移而改變。
在像CSS這種宣告式語言中,隨著時間而改變的值並不存在,也就沒有所謂變數的概念了。
CSS 引入了一種層級變數的概念,從而能夠從容應對可維護性的挑戰。這會讓在整個CSS tree 中都可以像徵性的引用一個變數
一、什麼是CSS變數
CSS 變數目前有兩種形式:
##變數,就是擁有合法識別碼和合法的值。可以被使用在任意的地方。可以使用var()函數使用變數。例如:var(--example-variable)會傳回--example-variable所對應的值自訂屬性。這些屬性使用--
where的特殊格式作為名字。例如--example-variable: 20px;即使一個css宣告語句。意思是將20px賦值給--example-varibale變數
注意: 變數名稱大小寫敏感,
--header-color和
--Header-Color是兩個不同變數
- 在css檔案中寫
- 寫在html標籤的inline-style裡
- 用JS給某個元素聲明,方法.style.setProperty
body{ --color: red; } <body style="--color: red;"></body> document.getElementsByTagName('body')[0].style.setProperty('--color', 'red')變數值的類型如果變數值是一個字串,可以與其他字串拼接
--bar: 'hello'; --foo: var(--bar)' world'; body:after { content: '--screen-category : 'var(--screen-category); }如果變數值是數值,不能與數值單位直接連用,必須使用calc()函數,將它們連接
.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"> <p class="two"> <p class="three"> </p> <p class="four"> </p> <p> </p>定義下面的CSS:
.two { --test: 10px; } .three { --test: 2em; }在這個範例中,var(--test)的結果是:
- class="two" 對應的節點: 10px
- class="three" 對應的節點: element: 2em
- class="four" 對應的節點: 10px (inherited from its parent)
- class="one" 對應的節點: 無效值, 即此屬性值為未被自訂css變數覆寫的預設值
p {
--color: #7F583F;
--bg: #F7EFD2;
}
.mediabox {
color: var(--color);
background: var(--bg);
}
@media screen and (min-width: 768px) {
body {
--color: #F7EFD2;
--bg: #7F583F;
}
}
五、與預處理器的不同1、預處理器變數不是即時的$color:#7F583F; @media screen and (min-width: 768px) { $color: #F7EFD2; } .mediabox { background: $color; }編譯結果
.mediabox { background: #7F583F; }2、預處理器不能限定作用域
$zcolor:blue; .ulbox { $zcolor:red; } ul{ color: $zcolor; }編譯為
ul { color: blue; }3、預處理器變數不可互通原生的CSS自訂屬性可以與任何CSS預處理器或純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'); }總結相較於傳統的LESS 、SASS 等預處理器變量,CSS 變數的優點在於:
- CSS 變數的動態性,能在頁面運行時更改,而傳統預處理器變數編譯後無法更改
- CSS 變數能夠繼承,能夠組合使用,具有作用域
- 配合Javascript 使用,可以方便的從JS 中讀/寫
以上是什麼是CSS變數? CSS變數的學習:CSS變數的繼承&作用域的詳細內容。更多資訊請關注PHP中文網其他相關文章!
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
刺客信條陰影:貝殼謎語解決方案
3 週前ByDDD
Windows 11 KB5054979中的新功能以及如何解決更新問題
2 週前ByDDD
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版
中文版,非常好用

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具