CSS Variables

CSS原生變量(CSS自定義屬性)

示例地址:https://github.com/ccyinghua/Css-Variables

一、css原生變量的基礎用法

變量聲明使用兩根連詞線"--"表示變量,"$color"是屬于Sass的語法,"@color"是屬于Less的語法,為避免沖突css原生變量使用

"--"

// 聲明變量
--color:#000;// 讀取變量
var(--color)

注:
1、變量聲明不能包含$,[,^,(,%等字符,普通字符局限在只要是“數字[0-9]”“字母[a-zA-Z]”“下劃線_”和“短橫線-”這些組合,但是可以是中文,日文或者韓文?
2、變量的值可以是顏色、字符串、多個值的組合等

示例:

<h3>css variables基礎使用</h3>
<div class="btn_box"><button type="button" class="login_btn">登錄</button>
</div>
/* css variables基礎使用 */
:root{--content1:"abc";--content2:"efg";--width:calc(100px   200px);--btn-bg:#279cff;--字體:18px;
}
.btn_box:before{content:var(--content1)' with add';display:block;line-height: 50px;
}
.btn_box:after{content:var(--content1)','var(--content2);display:block;line-height: 50px;
}
.login_btn{width:var(--width);height:50px;border-radius:30px;border:0;background: var(--btn-bg);box-shadow: 0 5px 5px rgba(39,156,255,.42);text-align: center;font-size:var(--字體);line-height: 50px;color:#fff;cursor:pointer;outline:none;
}

?

二、作用域

1、變量是遵循CSS語法的優先級高低的?

Id > class > 標簽 > *

2、注意并無!important這種用法;
3、如果變量所在的選擇器和使用變量的元素沒有交集,是沒有效果的。

<div>藍色</div>
<div class="divbox">綠色</div>
<div class="divbox" id="alert">紅色</div>
:root { --color: blue; }
.divbox { --color: green; }
#alert { --color: red; }
div{color: var(--color);width:300px;line-height: 50px;text-align: center;
}

三、響應式

div {--color: #7F583F;--bg: #F7EFD2;
}.mediabox {color: var(--color);background: var(--bg);
}@media screen and (min-width: 768px) {body {--color:  #F7EFD2;--bg: #7F583F;}
}

四、注意事項

1、屬性名(例:width/height/margin....等)不可以走變量

.divbox {--side: margin-top;/* 無效 */var(--side): 20px;
}

2、var()的完整的寫法是"var(<自定義屬性名> [, <默認值 ]?)",在變量的名字后面可以有一個默認值,如果引用的變量沒有定義(注意,僅限于沒有定義),則使用后面的值作為元素的屬性值

body {background:var(--bg,skyblue);
}

3、如果變量值是不合法的,例如下面設置背景色background只能是色值而不能是像素,則使用背景色屬性的默認值代替。

body {--bg: 20px;background-color: #369;background-color: var(--bg, #cd0000);
}

等同于

body {--bg: 20px;background-color: #369;background-color: transparent;
}

4、CSS變量設置數值

(1)

h3 {--size: 30;   font-size: var(--size)px;
}

結果h3元素的字體大小就是本身的默認大小?

(2)

h3 {--size: 30px;   font-size: var(--size);
}等于
h3 {font-size:30px;
}

(3)使用CSS3 calc()計算:

h3 {--size: 30;   font-size: calc(var(--size) * 1px);
}
等于
h3 {font-size:30px;
}

5、如果變量值帶有單位,就不能寫成字符串。

/* 無效 */
.divbox {--size: '30px';font-size: var(--size);
}/* 有效 */
.divbox {--size: 30px;font-size: var(--size);
}

6、進行calc()運算時,最好能提供默認值: calc(var(--base-line-height, 0) * 1rem)

7、不能作為媒體查詢值使用:

@media screen and (min-width: var(--desktop-breakpoint) {})

8、圖片地址,如url(var(--image-url)) ,不會生效

五、兼容性處理

檢測瀏覽器是否支持CSS自定義屬性的方法。

/*css*/@supports ( (--a: 0)) {/* supported */
}@supports ( not (--a: 0)) {/* not supported */
}
// Jsif (window.CSS && window.CSS.supports && window.CSS.supports('--a', 0)) {alert('CSS properties are supported');
} else {alert('CSS properties are NOT supported');
}

六、JS操作變量

CSS 變量可以和 JS 互相交互

:root{--testMargin:75px;
}
//  讀取
var root = getComputedStyle(document.documentElement);
var cssVariable1 = root.getPropertyValue('--testMargin').trim();
console.log(cssVariable1); // '75px'// 寫入
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); // '75px'

javascript可以把任意值存入css變量,可以讀取變量的值,實現javascript與css的通信。

七、CSS variables與預處理器的不同

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文件一起使用。

4、總結

  • 相較于傳統的 LESS 、SASS 等預處理器變量,CSS 變量的優點在于:
  • CSS 變量的動態性,能在頁面運行時更改,而傳統預處理器變量編譯后無法更改
  • CSS 變量能夠繼承,能夠組合使用,具有作用域
  • 配合 Javascript 使用,可以方便的從 JS 中讀/寫

八、CSS原生變量的兼容性

https://caniuse.com/#search=css var

?

本文轉載于:猿2048?https://www.mk2048.com/blog/blog.php?id=ha2b1icb&title=CSS Variables

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370278.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370278.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370278.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【基礎中的基礎】引用類型和值類型,以及引用傳遞和值傳遞

一直在博客園懟人&#xff0c;非常慚愧。所以鄭重決定&#xff1a; 好好寫一篇干貨&#xff0c;然后再接著懟人。 這是一起幫上陳百萬同學的求助&#xff0c;講了一會之后&#xff0c;我覺得很有些普世價值&#xff0c;干脆就發到園子來。面向小白&#xff0c;高手輕拍。 我們從…

Java 7:使用NIO.2進行文件過濾–第3部分

大家好。 這是使用NIO.2系列進行文件過濾的第3部分。 對于那些尚未閱讀第1 部分或第2部分的人 &#xff0c;這里有個回顧。 NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以執行與java.io相同的操作&#xff0c;以及許多出色的功能&#xf…

python眾數問題給定含有n個元素的多重集合s_分治法求眾數 給定含有n個元素的多重集合S 聯合開發網 - pudn.com...

分治法求眾數所屬分類&#xff1a;數據結構開發工具&#xff1a;C/C文件大小&#xff1a;240KB下載次數&#xff1a;3上傳日期&#xff1a;2018-01-04 20:19:09上 傳 者&#xff1a;九鼎說明&#xff1a; 給定含有n個元素的多重集合S&#xff0c;每個元素在S中出現的次數稱為該…

mysql 5.0 亂碼,解決MySQL 5.0.16的亂碼問題

導讀&#xff1a;問&#xff1a;怎樣解決MySQL 5.0.16的亂碼問題?答&#xff1a;MySQL 5.0.16的亂碼問題可以用下面的方法解決&#xff1a;1.設置phpMyAdminLanguage:Chinese simplified (zh-utf-8)MySQL 字符集&#xff1a;UTF-8 Unicode (utf8)MySQL 連接校對 gbk_chinese_c…

Hadoop Serialization -- hadoop序列化具體解釋 (2)【Text,BytesWritable,NullWritable】

回想&#xff1a;回想序列化&#xff0c;事實上原書的結構非常清晰&#xff0c;我截圖給出書中的章節結構&#xff1a;序列化最基本的&#xff0c;最底層的是實現writable接口&#xff0c;wiritable規定讀和寫的游戲規則 &#xff08;void write(DataOutput out) throws IOExce…

我需要多少個線程?

這取決于您的應用程序。 但是對于那些希望對如何從生產站點購買的所有昂貴內核中擠出更多資金的人來說&#xff0c;請多多包涵&#xff0c;我將闡明圍繞多線程 Java應用程序的奧秘。 內容針對最典型的Java EE應用程序進行了“優化”&#xff0c;該應用程序具有Web前端&#xff…

H5網頁適配 iPhoneX,就是這么簡單

iPhoneX 取消了物理按鍵&#xff0c;改成底部小黑條&#xff0c;這一改動導致網頁出現了比較尷尬的屏幕適配問題。對于網頁而言&#xff0c;頂部&#xff08;劉海部位&#xff09;的適配問題瀏覽器已經做了處理&#xff0c;所以我們只需要關注底部與小黑條的適配問題即可&#…

python為什么closed_為什么python類的函數被調用兩次[關閉](Why a function of python class is called twice [closed])...

為什么python類的函數被調用兩次[關閉](Why a function of python class is called twice [closed])我遇到了兩次調用的python類函數的問題。 我正在使用Spyder IDE。這是我的簡單代碼class Test:def f(self):print("a")from Test import *t Test()t.f()當我按“運行…

php關聯數組和哈希表,php遍歷哈希表及關聯數組的實例代碼

有關php數組的分類&#xff0c;PHP數組分為&#xff1a;數字索引數組和關聯數組。其中數字索引數組和C語言中的數組一樣&#xff0c;下標是為0&#xff0c;1&#xff0c;2…而關聯數組下標可能是任意類型&#xff0c;與其它語言中的hash&#xff0c;map等結構相似。PHP遍歷關聯…

數字校園-云資源平臺 2014.10.26-人人通共享空間

近期,教育部在統計學校信息化建設情況,當中一項重要內容,作為三通兩平臺的一個環節,就是學校開通人人通空間的情況,網上普及了一下知識,不就是十多年前就玩的學校博客的變種嗎,網上有一些產品,也是沒有熱鬧起來,為要求而要求的多,既然要求,就來一個吧,花了幾天時間,也做了一個.…

VUE.js 中取得后臺原生HTML字符串 原樣顯示問題

今天使用vue調試頁面&#xff0c;發現了頁面上的一個問題&#xff0c;后臺數據傳過來的HTML字符串并沒有被轉換為正常的HTML代碼&#xff0c;一拍腦門&#xff0c;發現忘記轉換了&#xff0c;于是滿心歡喜加上了{{{}}}。但是之后構建發現報錯&#xff1a; 為此去官網上查了下…

高性能持久消息

總覽 盡管有許多可用于Java的高性能消息傳遞系統&#xff0c;但大多數都避免引用基準&#xff0c;包括持久消息傳遞和消息的序列化/反序列化。 這樣做有很多原因。 1&#xff09;您并不總是需要或想要持久消息2&#xff09;您希望使用自己的序列化選項。 避免使用它們的一個重要…

python去掉重復內容并按原來次序輸出元素_在Python中,從列表中刪除重復項以使所有元素在保留順序時都是唯一的最快的算法是什么?...

飲歌長嘯使用方法&#xff1a;lst [8, 8, 9, 9, 7, 15, 15, 2, 20, 13, 2, 24, 6, 11, 7, 12, 4, 10, 18, 13, 23, 11, 3, 11, 12, 10, 4, 5, 4, 22, 6, 3, 19, 14, 21, 11, 1, 5, 14, 8, 0, 1, 16, 5, 10, 13, 17, 1, 16, 17, 12, 6, 10, 0, 3, 9, 9, 3, 7, 7, 6, 6, 7, 5, 1…

Lucene –快速添加索引和搜索功能

什么是Lucene&#xff1f; Apache LuceneTM是完全用Java編寫的高性能&#xff0c;功能齊全的文本搜索引擎庫。 它是一項適用于幾乎所有需要全文搜索的應用程序的技術&#xff0c;尤其是跨平臺的應用程序。 Lucene可以純文本&#xff0c;整數&#xff0c;索引PDF&#xff0c;Of…

td 雙擊 編輯 php,雙擊表格td進行編輯

$(function(){//隔行換色// $("tbody tr:odd").css("background-color","#eee");var numId $(".tbody td");numId.dblclick(function(){var tdIns $(this);var tdpar $(this).parents("tr");//tdpar.remove();//current_…

前端開發之基礎知識-HTML(一)

1.1 html概述和基本結構 html概述 HTML是 HyperText Mark-up Language 的首字母簡寫&#xff0c;意思是超文本標記語言&#xff0c;超文本指的是超鏈接&#xff0c;標記指的是標簽&#xff0c;是一種用來制作網頁的語言&#xff0c;這種語言由一個個的標簽組成&#xff0c;用…

nodejs的async異步編程

函數有&#xff1a; series waterfall parallel parallelLimit … series函數 串行執行 它的作用就是按照順序一次執行。 async.series({ one: function(callback){ callback(null, 1); }, two: function(callback){ callback(null, 2); } },function(err, results) { conso…

《深入理解Java虛擬機》讀書筆記3--垃圾回收算法

轉載&#xff1a;http://blog.csdn.net/tjiyu/article/details/53983064 下面先來了解Java虛擬機垃圾回收的幾種常見算法&#xff1a;標記-清除算法、復制算法、標記-整理算法、分代收集算法、火車算法&#xff0c;介紹它們的算法思路&#xff0c;有什么優點和缺點&#xff0c;…

python常用函數中文_【python】python常用函數

urlencode與urldecode當url中包含中文或者參數包含中文&#xff0c;需要對中文或者特殊字符(/、&)做編碼轉換。urlencode的本質&#xff1a;把字符串轉為gbk編碼&#xff0c;再把\x替換成%。如果終端是utf8編碼的&#xff0c;需要把結果再轉成utf8輸出&#xff0c;否則會亂…

帶有批注的Spring硒測試

這篇文章描述了如何在Java中實現Selenium測試。 它的靈感來自Alex Collins的帖子&#xff0c;并帶有注釋。 該代碼可在GitHub的Spring-Selenium-Test目錄中找到。 一些替代方法和更輕巧的技術可用于對Spring MVC應用程序進行單元測試。 要進行單元測試服務&#xff0c;請參見此…