想不想自定義一個(gè)CSS屬性顽聂?

最近翻大漠老師和張?chǎng)涡翊髱煹奈恼聲r(shí)肥惭,對(duì)CSS自定義屬性非常感興趣,所以就針對(duì)他們的文章自行學(xué)習(xí)理解了一番紊搪。CSS自定義屬性蜜葱?聽(tīng)著怎么那么奇怪呢,屬性還可以自定義嗦明,那不是可以放肆地玩耍笼沥?

名字和用途

其實(shí)CSS自定義屬性還有很多我們更為熟悉的曾用名或者說(shuō)小名,比如CSS變量娶牌、原生變量奔浅、CSS自定義屬性級(jí)聯(lián)變量,沒(méi)錯(cuò)诗良,都是同個(gè)東西汹桦。

啊原來(lái)是變量啊,說(shuō)得那么玄乎鉴裹,但是你可別小看它舞骆,玩得溜的話簡(jiǎn)直帥炸。

說(shuō)到變量径荔,在SASS\LESS等CSS預(yù)編譯工具中大家都已經(jīng)經(jīng)常運(yùn)用督禽,有那么幾點(diǎn)好處:
1总处、能使用顏色變量統(tǒng)一風(fēng)格;
2鹦马、可以采用一致的組件屬性胧谈,包括布局和定位等;
3菱肖、避免代碼冗余等等。

那既然SASS就能做到的東西稳强,我們還有這個(gè)所謂的CSS變量干什么呢?人家自然有它的獨(dú)到之處退疫。

比如可以在運(yùn)行時(shí)改寫(xiě),具備動(dòng)態(tài)性蹄咖;
比如方便使用JS讀取和改寫(xiě)付鹿;
比如可繼承、可組合舵匾、同時(shí)具有作用域俊抵。

在這幾個(gè)方面,預(yù)編譯工具完全被CSS變量KO了坐梯。

CSS變量語(yǔ)法

語(yǔ)法很簡(jiǎn)單徽诲,分成兩步,聲明變量和使用變量吵血。

聲明變量:

:root{
  --*: xxxx;
  /* --variable-name: variable-value */
}

這里需要注意幾個(gè)點(diǎn):
1谎替、變量必須聲明在{}中,如果在這里把它理解為屬性就更好記憶了蹋辅,畢竟我們不會(huì)把CSS屬性寫(xiě)到括號(hào)外邊去钱贯。
2、*號(hào)代表的就是我們給變量起的名字侦另。起名字這事真的很煩人秩命,還好CSS變量的名稱(chēng)限制很少,除了一些特殊關(guān)鍵字符不用使用褒傅,正常來(lái)說(shuō)你用數(shù)字\字母\下劃線_\短橫線-都是沒(méi)問(wèn)題的弃锐,據(jù)說(shuō)還可以使用中文、日文和韓文殿托。

:root{
  --黑色: #000;
}

body{
  background-color: var(--黑色);
}

手賤如我試了一下霹菊,真的可以。但是我怕寫(xiě)出去被別人打碌尔。

使用變量:
很簡(jiǎn)單浇辜,就是我們很熟悉的var券敌。

:root{
  --*: xxxx;
}

.div{
  background: var(--*);
}

還有一種設(shè)置默認(rèn)值的使用,就是在變量名稱(chēng)后面柳洋,加上一個(gè)默認(rèn)值待诅。

.div{
  background: var(--變量名稱(chēng),[默認(rèn)值]);
}

也就是說(shuō),當(dāng)這個(gè)變量沒(méi)有被聲明過(guò)的話熊镣,就會(huì)使用默認(rèn)值卑雁,不至于沒(méi)著沒(méi)落的。注意這里的情況是變量沒(méi)有被聲明過(guò)绪囱,要是變量是聲明過(guò)的测蹲,但是使用起來(lái)是不合法的,那么就會(huì)采用原來(lái)屬性的缺省默認(rèn)值鬼吵,并不是后面這個(gè)你設(shè)定的默認(rèn)值扣甲。

p{
  background-color: var(--color, #000);
  /* --color沒(méi)有聲明過(guò),所以這里的p背景是黑色的 */
}

p{
  --color: 20px;
  background-color: var(--color, #000);
  /* 很明顯齿椅,background-color: 20px;是語(yǔ)法錯(cuò)誤的琉挖,所以背景色為透明,是這個(gè)屬性的默認(rèn)值 */
}

作用域
1涣脚、如果你需要定義一個(gè)全局的變量示辈,那么可以放在:root根元素下面;
2遣蚀、如果只需要在部分元素\組件下使用矾麻,就定義在相關(guān)的類(lèi)下面险耀;
3粥帚、另外還可以在@media媒體查詢中或者:hover等偽類(lèi)中使用。

權(quán)重
理解了作用域柴灯,那么權(quán)重也是同樣的道理赠群,應(yīng)該CSS變量是可以繼承的旱幼,所以權(quán)重跟我們平時(shí)的屬性權(quán)重理解是一樣的。這里引用一下張?chǎng)涡翊笊竦睦印?br>

www.zhangxinxu.com

變量組合
這里舉了三個(gè)例子匀油,具體的說(shuō)明在注釋中敌蚜。

p{
 --fz: 50;
 font-size: var(--fz)px;
 /* 不要太天真窝爪,這樣是錯(cuò)的 */
}

p{
  --fz: 50;
 font-size: calc( var(--fz) * 1px);
 /* 如果你想這樣用,可以使用calc()函數(shù) */
}

p:after{
 --text: "hello";
 content: var(--text) " world";
 /* 但是字符串的連接是可以實(shí)現(xiàn)的 */
}

當(dāng)然纷跛,變量不止可以直接使用贫奠,直接或者通過(guò)計(jì)算把值傳遞給另一個(gè)變量也是可行的望蜡。

p{
  --fz: 20px;
  --fz-lg: var(--fz);
  font-size: var(--fz-lg);
  /* 直接傳遞 */
}

p{
  --fz: 20px;
  --fz-lg: calc( var(--fz) * 1.5);
  font-size: var(--fz-lg);
  /* 通過(guò)計(jì)算后傳遞 */
}

在JS中使用CSS變量
讀:getPropertyValue( )
寫(xiě):setProperty( )

比如說(shuō)泣特,你在:root上定義了一個(gè)color變量状您,用于設(shè)置頁(yè)面的主題色膏孟,那么通過(guò)下面的JS拌汇,你就可以很簡(jiǎn)單地改變color變量的值,從而改變頁(yè)面的主題色魁淳。換個(gè)皮膚界逛,so easy纺座。

// 讀取數(shù)據(jù)
const rootStyles = getComputedStyle(document.documentElement);
const varValue = rootStyles.getPropertyValue('--color').trim();

// 改寫(xiě)數(shù)據(jù)
document.setProperty('--color', value);

最后就是充分發(fā)揮你的想象力,看看CSS變量與JS的結(jié)合能產(chǎn)生什么樣奇妙的效果~最后就附一個(gè)大漠老師的想象力成果吧喳瓣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末畏陕,一起剝皮案震驚了整個(gè)濱河市蹭秋,隨后出現(xiàn)的幾起案子堤撵,更是在濱河造成了極大的恐慌,老刑警劉巖洞豁,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丈挟,死亡現(xiàn)場(chǎng)離奇詭異曙咽,居然都是意外死亡挑辆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)洒嗤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)渔隶,“玉大人间唉,你說(shuō)我怎么就攤上這事利术。” “怎么了际跪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)良姆。 經(jīng)常有香客問(wèn)我玛追,道長(zhǎng)闲延,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任陆馁,我火速辦了婚禮叮贩,結(jié)果婚禮上佛析,老公的妹妹穿的比我還像新娘。我一直安慰自己寸莫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布互婿。 她就那樣靜靜地躺著,像睡著了一般呛牲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上着茸,一...
    開(kāi)封第一講書(shū)人閱讀 51,679評(píng)論 1 305
  • 那天涮阔,我揣著相機(jī)與錄音灰殴,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛辣之,可吹牛的內(nèi)容都是我干的怀估。 我是一名探鬼主播合搅,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼康铭!你這毒婦竟也來(lái)了梳猪?” 一聲冷哼從身側(cè)響起春弥,我...
    開(kāi)封第一講書(shū)人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎扫责,沒(méi)想到半個(gè)月后逃呼,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年平匈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片增炭。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡隙姿,死狀恐怖输玷,靈堂內(nèi)的尸體忽然破棺而出队丝,到底是詐尸還是另有隱情炭玫,我是刑警寧澤貌虾,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布尽狠,位于F島的核電站,受9級(jí)特大地震影響践图,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜码党,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一揖盘、第九天 我趴在偏房一處隱蔽的房頂上張望锌奴。 院中可真熱鬧,春花似錦箕慧、人聲如沸茴恰。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春渣叛,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背淳衙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工饺著, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留幼衰,地道東北人渡嚣。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓肥印,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親腹鹉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子敷硅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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

  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案绞蹦? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評(píng)論 1 92
  • 原文地址:It’s Time To Start Using CSS Custom Properties 作者:Se...
    穆如清風(fēng)化雨閱讀 1,610評(píng)論 0 10
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理刊侯,服務(wù)發(fā)現(xiàn)滨彻,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,822評(píng)論 6 342
  • 女人總喜歡在愛(ài)人彌留之際擺出漂亮的姿態(tài),她們這種激情向來(lái)讓我有點(diǎn)看不慣辜羊。我覺(jué)得有時(shí)候她們寧愿愛(ài)人早點(diǎn)死掉词顾,免得耽誤...
    cooooky閱讀 386評(píng)論 0 1