CSS 變量

CSS 變量

參考鏈接

今年三月,微軟宣布 Edge 瀏覽器將支持 CSS 變量止毕。這個(gè)重要的 CSS 新功能毛肋,所有主要瀏覽器已經(jīng)都支持了积蜻。

變量的聲明

聲明變量的時(shí)候,變量名前面要加兩根連詞線(--)。

body {
  --foo: #7F583F;
  --bar: #F7EFD2;
}

變量名大小寫(xiě)敏感,--header-color和--Header-Color是兩個(gè)不同變量。

var() 函數(shù)

var()函數(shù)用于讀取變量昆码。

a {
  color: var(--foo);
  text-decoration-color: var(--bar);
}

var()函數(shù)還可以使用第二個(gè)參數(shù),表示變量的默認(rèn)值邻储。如果該變量不存在赋咽,就會(huì)使用這個(gè)默認(rèn)值。

a {
  color: var(--foo, #7F583F);
  text-decoration-color: var(--bar);
}

第二個(gè)參數(shù)不處理內(nèi)部的逗號(hào)或空格吨娜,都視作參數(shù)的一部分脓匿。

var(--font-stack, "Roboto", "Helvetica");
var(--pad, 10px 15px 20px);

var()函數(shù)還可以用在變量的聲明。

:root {
  --primary-color: red;
  --logo-text: var(--primary-color);
}

注意萌壳,變量值只能用作屬性值亦镶,不能用作屬性名日月。

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

變量的類型

如果變量值是一個(gè)字符串,可以與其他字符串拼接缤骨。

--bar: 'hello';
--foo: var(--bar)' world';

如果變量值是數(shù)值爱咬,不能與數(shù)值單位直接連用。

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

上面代碼中绊起,數(shù)值與單位直接寫(xiě)在一起精拟,這是無(wú)效的。必須使用calc()函數(shù)虱歪,將它們連接蜂绎。

.foo {
  --gap: 20;
  margin-top: calc(var(--gap) * 1px);
}

如果變量值帶有單位,就不能寫(xiě)成字符串笋鄙。

/* 無(wú)效 */
.foo {
  --foo: '20px';
  font-size: var(--foo);
}

/* 有效 */
.foo {
  --foo: 20px;
  font-size: var(--foo);
}

兼容性處理

a {
  color: #7F583F;
  color: var(--primary);
}

也可以使用@support命令進(jìn)行檢測(cè)师枣。

@supports ( (--a: 0)) {
  /* supported */
}

@supports ( not (--a: 0)) {
  /* not supported */
}

JavaScript 操作

JavaScript 也可以檢測(cè)瀏覽器是否支持 CSS 變量。

const isSupported =
  window.CSS &&
  window.CSS.supports &&
  window.CSS.supports('--a', 0);

if (isSupported) {
  /* supported */
} else {
  /* not supported */
}

JavaScript 操作 CSS 變量的寫(xiě)法如下萧落。

// 設(shè)置變量
document.body.style.setProperty('--primary', '#7F583F');

// 讀取變量
document.body.style.getPropertyValue('--primary').trim();
// '#7F583F'

// 刪除變量
document.body.style.removeProperty('--primary');

這意味著践美,JavaScript 可以將任意值存入樣式表。下面是一個(gè)監(jiān)聽(tīng)事件的例子找岖,事件信息被存入 CSS 變量陨倡。

const docStyle = document.documentElement.style;

document.addEventListener('mousemove', (e) => {
  docStyle.setProperty('--mouse-x', e.clientX);
  docStyle.setProperty('--mouse-y', e.clientY);
});

那些對(duì) CSS 無(wú)用的信息,也可以放入 CSS 變量许布。

--foo: if(x > 5) this.width = 10;

上面代碼中兴革,--foo的值在 CSS 里面是無(wú)效語(yǔ)句,但是可以被 JavaScript 讀取蜜唾。這意味著杂曲,可以把樣式設(shè)置寫(xiě)在 CSS 變量中,讓 JavaScript 讀取袁余。
所以解阅,CSS 變量提供了 JavaScript 與 CSS 通信的一種途徑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泌霍,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子述召,更是在濱河造成了極大的恐慌朱转,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件积暖,死亡現(xiàn)場(chǎng)離奇詭異藤为,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)夺刑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)缅疟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)分别,“玉大人,你說(shuō)我怎么就攤上這事存淫≡耪叮” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵桅咆,是天一觀的道長(zhǎng)括授。 經(jīng)常有香客問(wèn)我,道長(zhǎng)岩饼,這世上最難降的妖魔是什么荚虚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮籍茧,結(jié)果婚禮上版述,老公的妹妹穿的比我還像新娘。我一直安慰自己寞冯,他們只是感情好渴析,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著简十,像睡著了一般檬某。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上螟蝙,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天恢恼,我揣著相機(jī)與錄音,去河邊找鬼胰默。 笑死场斑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的牵署。 我是一名探鬼主播漏隐,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼奴迅!你這毒婦竟也來(lái)了青责?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤取具,失蹤者是張志新(化名)和其女友劉穎脖隶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體暇检,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产阱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了块仆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片构蹬。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡王暗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出庄敛,到底是詐尸還是另有隱情俗壹,我是刑警寧澤,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布铐姚,位于F島的核電站策肝,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏隐绵。R本人自食惡果不足惜之众,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望依许。 院中可真熱鬧棺禾,春花似錦、人聲如沸峭跳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蛀醉。三九已至悬襟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拯刁,已是汗流浹背脊岳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留垛玻,地道東北人割捅。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像帚桩,于是被迫代替她去往敵國(guó)和親亿驾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容