css變量

css變量


:root{
    --color: red;
}

//body {
//    --color: red;
//}

h1 {
    color: var(--color); /** 這里獲取到的是全局聲明的變量饵沧,值為red **/
}

div {
    --color: blue;
    color: var(--color); /** 這里獲取到的是局部聲明的變量怖竭,值為blue **/
}

參考:https://segmentfault.com/a/1190000023479851
參考:http://www.ruanyifeng.com/blog/2017/05/css-variables.html

CSS選擇器不能是數(shù)字開頭征绎,JS中的變量是不能直接數(shù)值的,但是欢顷,在CSS變量中,這些限制通通沒有。 但不能包含$,[悼沿,^等舔,(骚灸,%等字符,普通字符局限在只要是“數(shù)字[0-9]”“字母[a-zA-Z]”“下劃線_”和“短橫線-”這些組合慌植,但是可以是中文甚牲,日文或者韓文。

  1. 聲明:大小寫敏感, --variable-name: variable-value;
:root{
    --color: red;
}
  1. 使用:使用var(變量名)來使用一個(gè)變量
#div {
    color: var(color)
}
  1. 變量組合使用
    使用變量的時(shí)候蝶柿,通常不會(huì)單獨(dú)使用丈钙,可以組合使用
    當(dāng)變量的值是字符串時(shí),可以直接拼接交汤,如下
:root{
  --screen-category: 'category'  //變量值是字符串
}
body:after {
  content: '--screen-category: 'var(--screen-category);  // 直接拼接
}

當(dāng)變量的值是數(shù)值時(shí)雏赦,必須使用calc()函數(shù)計(jì)算,就算還是簡(jiǎn)單的單位拼接

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

.foo {
  --gap: 20;
  margin-top: calc(var(--gap) * 1px);
}
  1. 變量未定義和錯(cuò)誤定義
    如果我們使用的變量沒有定義芙扎,則使用后面的值作為元素的屬性值, 如下所示
    body里面訪問不到.box定義的--1星岗,因此使用#cd0000
.box {
  --1: #369; 
}
body {
  background-color: var(--1, #cd0000);
}

使用變量時(shí),若變量已定義戒洼,但是變量的值不正確俏橘,則使用缺省值,如:

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

結(jié)果body的顏色是transparent,因?yàn)閎ackground-color的缺省值就是transparent

二圈浇、繼承和作用域

  1. 作用域
    使用:root{}來定義全局css變量
    想讓變量在局部可用寥掐,就定義在某個(gè)特定的選擇器下
    還是下面這段代碼
:root{
  color: red; //全局可用
}
.box {
  --1: #369;  //只在.box這個(gè)作用域可用 
}
body {
  background-color: var(--1, #cd0000);
}
  1. 繼承
<div class="wrapper">
   <div class="content1"></div>
   <div class="content2"></div>
</div>

.wrapper {
   --color: red;
}

.content1 {
   --color: yellow;
}

content1的--color為yellow
content2的--color沒有定義靴寂,繼承了wrapper的--color為red
--color: yellow只在content1的作用域內(nèi)有效

三、js操作css變量

:root {
   --color: red;
}
//讀取
var root = getComputedStyle(document.documentElement);
var color = root.getPropertyValue('--color').trim();
console.log(color); // 'red'

//改變
document.documentElement.style.setProperty('--color', 'yellow');
var color = root.getPropertyValue('--color').trim();
console.log(color);  // 'yellow'

//刪除
document.documentElement.style.removeProperty('--color');
var color = root.getPropertyValue('--color').trim();
console.log(color); // 'red'

四召耘、與預(yù)處理器(sass,less)比較

  1. css變量:
    動(dòng)態(tài)性百炬,可以在運(yùn)行時(shí)更改
    可以方便地從js讀寫
    可繼承,可組合污它,有作用域

  2. 預(yù)處理器:
    預(yù)處理器的變量不是動(dòng)態(tài)的收壕,在運(yùn)行時(shí)不可更改
    預(yù)處理器的變量沒有作用域的說法
    不能與js交互

如果想使用但又想兼容所有瀏覽器,就是用下面的方法檢測(cè)瀏覽器是否支持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');
}

六轨蛤、常用場(chǎng)景
為風(fēng)格統(tǒng)一而使用顏色變量
一致的組件屬性(布局蜜宪,定位等)
避免代碼冗余(響應(yīng)式布局,制動(dòng)動(dòng)畫)

參考:https://segmentfault.com/a/1190000015948538

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末祥山,一起剝皮案震驚了整個(gè)濱河市圃验,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缝呕,老刑警劉巖澳窑,帶你破解...
    沈念sama閱讀 212,686評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異供常,居然都是意外死亡摊聋,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,668評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門栈暇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來麻裁,“玉大人,你說我怎么就攤上這事源祈〖逶矗” “怎么了?”我有些...
    開封第一講書人閱讀 158,160評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵香缺,是天一觀的道長(zhǎng)手销。 經(jīng)常有香客問我,道長(zhǎng)图张,這世上最難降的妖魔是什么锋拖? 我笑而不...
    開封第一講書人閱讀 56,736評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮祸轮,結(jié)果婚禮上兽埃,老公的妹妹穿的比我還像新娘。我一直安慰自己倔撞,他們只是感情好讲仰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,847評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般鄙陡。 火紅的嫁衣襯著肌膚如雪冕房。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,043評(píng)論 1 291
  • 那天趁矾,我揣著相機(jī)與錄音耙册,去河邊找鬼。 笑死毫捣,一個(gè)胖子當(dāng)著我的面吹牛详拙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓同,決...
    沈念sama閱讀 39,129評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼饶辙,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了斑粱?” 一聲冷哼從身側(cè)響起弃揽,我...
    開封第一講書人閱讀 37,872評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎则北,沒想到半個(gè)月后矿微,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,318評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡尚揣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,645評(píng)論 2 327
  • 正文 我和宋清朗相戀三年涌矢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片快骗。...
    茶點(diǎn)故事閱讀 38,777評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡娜庇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出滨巴,到底是詐尸還是另有隱情思灌,我是刑警寧澤俺叭,帶...
    沈念sama閱讀 34,470評(píng)論 4 333
  • 正文 年R本政府宣布恭取,位于F島的核電站,受9級(jí)特大地震影響熄守,放射性物質(zhì)發(fā)生泄漏蜈垮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,126評(píng)論 3 317
  • 文/蒙蒙 一裕照、第九天 我趴在偏房一處隱蔽的房頂上張望攒发。 院中可真熱鬧,春花似錦晋南、人聲如沸惠猿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,861評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偶妖。三九已至姜凄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間趾访,已是汗流浹背态秧。 一陣腳步聲響...
    開封第一講書人閱讀 32,095評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扼鞋,地道東北人申鱼。 一個(gè)月前我還...
    沈念sama閱讀 46,589評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像云头,于是被迫代替她去往敵國和親捐友。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,687評(píng)論 2 351