background-clip的正確使用姿勢
- 2019 年 12 月 10 日
- 筆記
background-clip的正確使用姿勢
前幾天遇到一個問題:問如何通過背景色來顯示相反的文本顏色。 如果通過JS的話,可以灰常輕鬆的解決這個問題,但是純用
CSS
的話也不是不可能的。 這就需要用到今天的主角background-clip
了。
background-clip是個啥
background-clip
可以用來控制背景圖片/顏色的填充範圍。 我們知道,默認的background
會填充盒模型的content
+padding
+border
區域內。(可以將border
顏色設為透明進行觀察)


現在,我們可以通過設置background-clip
來控制背景填充的範圍。
background-clip的有效屬性值
border-box
設置填充範圍到border
,這個也是默認的選項。 圖中的border
應為淺灰色,因為後邊有藍色的背景色,所以導致border
顏色變成了深藍色。

padding-box
設置填充範圍到padding
,也就是說,border
將不會有background
的填充。

content-box
僅填充content
區域。。

text
最後一個屬性值,目前webkit
上還沒有標準版的實現,只能通過-webkit-background-clip
來使用。 想要看到效果,我們需要將字體顏色設為透明 or 半透明。 效果如下:

來一個四種效果的對比圖:

回到之前的問題
最開始我們說過的那個問題,如何根據背景色來顯示反色文本。 實現方式如下:
background-color: inherit
來繼承父元素的屬性值。background-clip: text
來確保背景色只會填充到文字區域color: transparent
來將文本顏色設為透明filter: invert(100%)
來實現反色濾鏡
.back { background: blue; width: 100px; height: 100px; display: inline-block; } .back:nth-of-type() { background: red; } .back:nth-of-type() { background: green; } .back:nth-of-type() { background: yellow; } .back:nth-of-type() { background: pink; } .back:nth-of-type() { background: black; } .back:nth-of-type() { background: white; } .text { background: inherit; -webkit-background-clip: text; color: transparent; filter: invert(100%); }

做更多的事
通過background-clip: text
可以做很多有意思的事兒,比如說漸變色的文字。 結合著animation
甚至可以實現動態的漸變色字體。
P.S. Animate.css首頁的標題效果就是通過這個方式來實現的。
* { margin: ; padding: ; } body { position: relative; width: 100vw; height: 100vh; background-color: #9E9E9E; } .box1 { position: absolute; width: 50%; padding-top: 25%; background-color: #3F51B5; left: 50%; top: 50%; transform: translate(-50%, -50%); z-index: ; }
