CSS自定義屬性級聯變量var()


全部隨筆/CSS3


 

作為前端小白,熱衷於前端技術,最近正在學習CSS3。前幾天看見一篇文章:《必須了解的CSS變量(var)》,看見這標題就立刻被吸引了。納尼納尼?var不是JavaScript的關鍵字么,什么時候CSS也能用了?話說啥時候CSS也能聲明變量了?難道不是像SASS/SCSS這樣的CSS預編譯器的功能么?

在閱讀博文及更加深入的查閱后,寫了此篇博文,以供交流。文中有多處引用原博文內容,若有侵權,請聯系我速刪。文末附原博文及相關引用鏈接。

名稱

  • 開始時被叫做“CSS變量”
  • 經過擴展和重構后,改為“CSS自定義屬性”
  • CSS增加@apply規則后,名稱變為“CSS自定義屬性級聯變量”

語法

 1.定義語法:--variableName: value;

  變量名稱(variableName)使用規范:

  • 以"--"開頭,后面可以是數字、字母、下划線、連字符、漢字等,但不能包含$、[、^、(、%等字符
  • 大小寫敏感(另:CSS中,書寫屬性名時大小寫不敏感,但是書寫選擇器時大小寫敏感)
  • 定義只能出現在塊{}內
  • 可以使用!important修飾
  • 作用域就是選擇器的選定范圍,作用域出現交叉時,同名變量覆蓋規則取決於選擇器權重

 

1 .a{
2     --container-bg-color: #0ff;
3 }
4 div {
5   --container-bg-color: #0f0 !important;
6 }
View Code

 

2.使用語法:cssPropertyName: var(--variableName[,declarationValue]);

  • declarationValue:僅限於當--variableName變量未定義時的備用選項
  • val()只能被引用,不能被賦值。即只能出現在":"右側
  • 不能用作地址,如:url(var(--url));
  • var()后面默認帶有一個空格,因此在其后面加單位無效,如:

--size: 20; font-size: var(--size)px;

會解析成font-size: 20 px;注意此時“20”與“px”之間有個空格,導致該語句無效。單位應在定義時加上,如:

--size: 20px; font-size: val(--size);

檢查瀏覽器支持

1.使用@supports方法

 

 1 @supports ( (--size: 0)) {
 2 
 3   /* 支持 */
 4 
 5 }
 6 
 7 @supports ( not (--size: 0)) {
 8 
 9  /* 不支持 */
10 
11 }
View Code

 

2.使用JavaScript

1 if(window.CSS && window.CSS.supports && window.CSS.supports('--size', 0)) {
2 
3   /* 支持 */
4 
5 }else{
6 
7   /* 不支持 */
8 
9 }
View Code

使用JavaScript操作原生屬性變量

  •  window.getComputedStyle(element, '偽類'|null):[IE9+,Firefox,Chrome,Safari, Opera]獲得當前元素最終使用的所有CSS屬性值,返回一個只讀CSS樣式聲明對象。
  •  window.getComputedStyle(element, '偽類'|null).getPropertyValue('propertyName')
  •  window.getComputedStyle(element, '偽類'|null).setProperty('propertyName', value)

 

1 var d1 = document.getElementById("d1"),
2 style1 = window.getComputedStyle(d1, ":after");
3  
4 var d2 = document.getElementById("d2"),
5 style2 = window.getComputedStyle(d2, null);
6 
7 var value = d1.getPropertyValue('--variableName');
View Code

 瀏覽器兼容

參考文章:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM