CSS中存在一個神秘的變量,少有人知自然也不怎么為人所用。它就是crrentColor
變量(或者說是CSS關鍵字,但我覺得稱為變量好理解些)。
初識
它是何物?具有怎樣的功效?它從哪里來?帶著這些疑問我們繼續。
下面是來自MDN的解釋:
currentColor
代表了當前元素被應用上的color
顏色值。 使用它可以將當前這個顏色值應用到其他屬性上,或者嵌套元素的其他屬性上。
你這可以這么理解,CSS里你可以在任何需要寫顏色的地方使用currentColor
這個變量,這個變量的值是當前元素的color
值。如果當前元素沒有在CSS里顯示地指定一個color
值,那它的顏色值就遵從CSS規則,從父級元素繼承而來。
到此似乎解決了上面三個哲學式的提問,但依然有些模糊。程序員之間的交流,還是上碼才好。
- 場景1
<p>約么?</p>
p{
color: red;
}
此時,<p>
標簽currentColor
的值為red
。
- 場景2
<div class="container">
<p>約么?</p>
</div>
.container{
color: #00ff00;
}
現在,我們沒有給<p>
標簽指定顏色,它的color
從父級容器也就是class
為container
的div
繼承而來,換句話說此時p
標簽的color
為#00ff00
,currentColor
又是直接去取元素的color
值,所以此時p
標簽的currentColor
值也為#00ff00
。
- 場景3
如果父級元素也沒有寫color
呢?其實這里都還是CSS規則的范疇,跟本文的主角關系不太大。但本著不啰嗦會死的原則,就展開了講。
如果父級元素也沒有指定顏色,那它的父級元素就會從父級的父級去繼承,直到文檔的根結點html
標簽都還沒顯示指定一個顏色呢,就應用上瀏覽器默認的顏色唄~
<!doctype html>
<html>
<head>
<title>我來組成頭部</title>
</head>
<body>
<p>約么?</p>
</body>
<footer>戰神金鋼,宇宙的保護神!</footer>
</html>
/**
* 無CSS
*/
那,這個時候的黑色其實是瀏覽器默認給的。此時p
標簽的currentColor
自然也跟color
值一樣,為黑色,純黑的#000
。
如何用?
了解它是怎樣的物品后,下面問題來了,如何用?有額外的buff
效果么,耗藍多么,CD時間長么。。。
前面說道,它就是一個CSS變量,存儲了顏色值,這個值來自當前元素的color
CSS屬性。當你需要為該元素其他屬性指定顏色的時候,它就可以登上舞臺了。
<div class="container">
好好說話,有話好好說
</div>
.container{
color: #3CAADB;
border: 4px solid currentColor;
}
這里我們第一次領略了currentColor
的奇效。在指定邊框顏色的時候,我們直接使用currentColor
變量,而沒有寫一個傳統的顏色值。
你似乎也知道了該如何用了。不只是border
,其他能夠使用顏色的地方,比如background
,box-shadow
等等。
帶你裝逼帶你飛
新技能就是如此炫酷。大開腦洞任性地去使用吧!
與漸變混搭
你可能無法想象到的是,除了可以將currentColor
用到普通需要顏色的場景,它同樣可以被用在漸變中。
<div class="container">
</div>
.container{
height:200px;
color: #3CAADB;
background-image: linear-gradient(to right, #fff, currentColor 100%);
}
甚至也可用于填充svg,下面會有相應示例。
與CSS動畫結合
當與CSS animation
結合,可以得到更加有創意的效果,比如這個來自codepen的示例
See the Pen currentColor by Scott Kellum (@scottkellum) on CodePen.
更加簡潔的CSS
其實,新技能不只是裝逼那么單純,合理的使用currentColor
變量會讓你的CSS代碼變得簡潔。這才是我們想要達到的目的。以炫技為目的技能是沒有生產意義的。
看下面這個例子(這個示例靈感來自這里)
我們在按鈕中使用了一個svg圖標。你是一個負責任的FE,所以,對這個按鈕的各種狀態:focus
,:hover
,:active
都作了樣式上的處理。同時,為了讓圖標也跟著保持一致的姿態變更,需要把對<a>
標簽的樣式處理同樣就到到<svg>
標簽上。于是你的CSS代碼看起來就是下面這樣的了。
/*a 標簽*/
.button {
color: #117B6F;
font-size: 1.2em;
}
.button:hover, .button:focus {
color: #01B19A;
}
.button:active {
color: #02D7BB;
}
/*svg 標簽*/
.button svg {
height: 17px;
width: 17px;
fill: #117B6F;
}
.button:hover svg, .button:focus svg {
fill: #01B19A;
}
.button:active svg {
fill: #02D7BB;
}
你也發現了,代碼有點冗余。接下來,我們用currentColor
來將它簡化一下。于是成了下面這樣:
/*a 標簽*/
.button {
color: #117B6F;
font-size: 1.2em;
}
.button:hover, .button:focus {
color: #01B19A;
}
.button:active {
color: #02D7BB;
}
/*svg 標簽*/
.button svg {
height: 17px;
width: 17px;
fill: currentColor;
}
更好維護的CSS
仔細想想不難發現,當使用currentColor
后,我們的CSS也變得更加好維護了。
還拿上面的按鈕示例來說,優化之前不但代碼冗余,而且哪天PM來勁了說這顏色飽看,給換個其他色。于是你得把<a>
標簽和<svg>
一起換了。
但優化后就不一樣了,因為<svg>
使用的填充是currentColor
,你只需要改變<a>
標簽的顏色,它也就跟著變了。真正做到了牽一發而不動全身。這不正是眾碼友們畢生所追求的理想編程境界么。
瀏覽器兼容性
一提到瀏覽器兼容性,FE同學們或許就不敢那么任性了。之前你可能是這樣的:
當聽到IE傳來的噩耗,你可能是這樣的:
經查,can i use 沒有關于它的數據。
經測,
- 本機Win7搭載的IE8不支持
- 本機安裝的火狐31發來戰報表示支持
- Chrome,你猜?
- 本機Safari 5.1.7也表示支持
- 本機Opera 26 同樣表示支持
根據這篇文章的描述,它是可以很好地工作在在所有現代瀏覽器和IE9+上的,甚至是各瀏覽器對應的移動版本。所以,在IE不是主要客戶對象的情況下,還是可以放心使用的。
參考
文章列表