自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

快速了解CSS 相對顏色

開發(fā) 前端
現(xiàn)在 Chrome 119 中,令人無比期待的 CSS 相對顏色終于正式支持了!有了它,可以很輕松地將一個顏色轉(zhuǎn)換成任意你所需要的顏色,對設(shè)計師和前端都非常友好,一起了解一下吧!

在正式開始介紹之前,可以先想一個問題:如何動態(tài)去改變一個顏色的透明度?

比如一個顏色

:root{
  color: red
}

如何將它變成透明度為 50% 的紅色呢?

現(xiàn)在 Chrome 119 中,令人無比期待的 CSS 相對顏色終于正式支持了!有了它,可以很輕松地將一個顏色轉(zhuǎn)換成任意你所需要的顏色,對設(shè)計師和前端都非常友好,一起了解一下吧

一、什么是 CSS 相對顏色

CSS 相對顏色(CSS relative color)是 CSS Color Level 5[1] 的新特性,它可以將一個顏色以某種顏色格式進行分解、重組,從而得到一個全新的顏色。

語法非常簡單,以rgb為例。

color: rgb(from red r g b / alpha)

這個表示將顏色red以rgb模式,分解成r、g、b(alpha)幾個單獨的變量,非常類似 JS 中的結(jié)構(gòu)賦值。

也就是說,上面的寫法最后等同于。

color: rgb(255 0 0 / 100%)

那么,這個有什么用呢?

其實經(jīng)過上面的from關(guān)鍵詞分解以后,得到的r、g、b、alpha都是獨立的變量,我們可以將任意變量改寫成所需要的,比如透明度為50%。

color: rgb(from red r g b / 50%) /* rgb(255 0 0 / 50%) */

注意,這里的顏色是完全動態(tài)的,我們還可以用 CSS 變量將任意顏色實時改變透明度。

--color: red;
--color50: rgb(from var(--color) r g b / 50%)

下面是一個演示,可以實時將顏色的透明度變?yōu)?0%。

你也可以訪問在線鏈接

  • CSS relative color (juejin.cn)[2]
  • CSS relative color (codepen.io)[3]

二、相對顏色實現(xiàn)的奧秘:calc

從上一節(jié)我們了解到,通過from關(guān)鍵詞,可以將一個顏色分解成幾個獨立變量,比如r、g、b、alpha,但是,僅僅這樣是不夠的。

回到文章標題,為什么說是相對顏色呢?那肯定是和現(xiàn)在的顏色有些關(guān)聯(lián),要做到這一點,需要用到 CSS calc 函數(shù)。

舉個例子,比如一個半透明的紅色。

--color: rgba(255,0,0,.5)

如何在這個基礎(chǔ)上繼續(xù)降低20%的透明度呢?

很簡單,將這個顏色分解后,直接用calc進行計算。

--color: rgba(255,0,0,.5)
--color20: rgb(from var(--color) r g b / calc(alpha - .2)) /*rgba(255,0,0,.3)*/

這樣,無論給定的顏色是什么透明度,都可以在這個基礎(chǔ)之上降低20%,這就是「相對顏色」!

下面介紹的幾個例子都需要用到calc,接著往下看。

三、顏色的加深和減淡

顏色的加深和減淡其實是提升和降低顏色的亮度。

提到亮度,需要用到有表示亮度(light)的顏色空間,比如說綠色,用hls表示如下:

如果需要將這個綠色加深,就是需要將亮度調(diào)暗一點,比如減少10%。

color: hsl(from green h s calc(l - .1 )); /*hsl(120deg 100% 15%)*/

如果需要將這個綠色減淡,其實就是需要將亮度調(diào)高一點。

color: hsl(from green h s calc(l + .1 )); /*hsl(120deg 100% 35%)*/

下面是實際效果(中間是原色,兩邊分別是減淡和加深的效果)。

四、讓顏色更加鮮艷

和上面的例子一樣,還可以通過改變顏色的飽和度,讓顏色更加鮮艷。

當然,這里就不能用上面的綠色了,因為它的飽和度已經(jīng)是100了,我們換一個比較溫和的綠色。

color: hsl(122.42deg 39.44% 49.22%);

如果需要將這個綠色更加鮮艷一點,就是需要將飽和度提高一點,比如增加30%。

color: hsl(from var(--color) h calc(s + .3) l); /*hsl(122.42deg 69.44% 49.22%)*/

如果需要將這個綠色看起來暗淡無光,直到成灰色,其實就是需要需要將飽和度減少一點。

color: hsl(from var(--color) h calc(s - .3) l); /*hsl(122.42deg 9.44% 49.22%)*/

下面是實際效果(中間是原色,兩邊分別飽和度降低和增強的效果)。

五、生成鄰近色或者互補色

在 CSS 濾鏡中有一個色相旋轉(zhuǎn)濾鏡,可以很輕松的改變?nèi)我庠氐纳唷?/p>

filter: hug-rotate(30deg)

不過這種濾鏡是整體改變,無法只改變某個顏色。

現(xiàn)在用 CSS 相對顏色就很好實現(xiàn)了,比如下面是紅色在經(jīng)過一系列色相變化后的效果。

--color: red;
--color1: hsl(from var(--color) calc(h + 30 ) s l);
--color2: hsl(from var(--color) calc(h + 30 ) s l);
--color3: hsl(from var(--color) calc(h + 60 ) s l);
...

效果如下:

這里每個顏色色相相差 30度, 相差180度的就是光學互補色,比如紅色和青色(淺綠色)就是互補色。

六、顏色的反向

所謂反向,就是黑的變白,白的變黑,藍的變黃,綠的變紫色,這個在濾鏡中也有現(xiàn)成的。

filter: invert(1)

那么,相對顏色中如何計算呢?

其實這個是 rgb的計算方式,只需要將每個通道的顏色值反過來就行了,就像這樣。

color: rgb(from yellow calc(1 - r) calc(1 - g) calc(1 - b));

注意,這里的值都是歸一化處理的,1 表示 255。

效果如下,左邊是原色,右邊是反色。

以上所有演示可以訪問以下鏈接

  • CSS relative colors demo (juejin.cn)[4]
  • CSS relative colors demo (codepen.io)[5]

七、最后總結(jié)一下

CSS 相對顏色可以說是關(guān)于 CSS 顏色處理最為強大的新特性了,幾乎可以滿足在 CSS 中一切關(guān)于顏色的計算,再也無需 JS參與計算了,下面總結(jié)一下要點。

  • 在以往,CSS 中很難對一個顏色進行轉(zhuǎn)換,只能通過濾鏡或者其他偏方去處理。
  • 現(xiàn)在出來了 CSS 相對顏色,可以將顏色按照顏色空間分解成單獨的值,類似于 JS 中的解構(gòu)賦值。
  • 并且這些值可以隨意配合 calc 計算,在現(xiàn)有基礎(chǔ)上增加或者減少,因此叫做相對顏色。
  • CSS 相對顏色可以實現(xiàn)顏色的加深和減淡、飽和度變化、色相變化,還有反色等需求。

當然相對顏色的應用遠遠不止以上幾點,可以說能夠想到的場景都可以用這種方式來解決,將來,這一特性在全局主題應用中尤為重要,一起期待一下吧。

[1]CSS Color Level 5: https://www.w3.org/TR/css-color-5/#relative-colors。

[2]CSS relative color (juejin.cn): https://code.juejin.cn/pen/7297274766421917747。

[3]CSS relative color (codepen.io): https://code.juejin.cn/pen/7297274766421917747。

[4]CSS relative colors demo (juejin.cn): https://code.juejin.cn/pen/7297507402143203337。

[5]CSS relative colors demo (codepen.io): https://code.juejin.cn/pen/7297507402143203337。

責任編輯:姜華 來源: 前端偵探
相關(guān)推薦

2023-11-20 09:27:28

CSS前端

2024-07-24 10:58:32

2024-03-25 09:20:22

CSS語法fixed

2023-06-26 09:16:34

CSScolor-mix

2010-08-25 14:56:15

CSS相對定位

2015-08-26 16:17:49

OpenStack OpenStack 架開源云平臺

2010-09-06 11:17:19

CSS相對定位CSS絕對定位

2010-09-14 17:20:03

CSS DIV相對定位

2010-09-10 11:32:23

CSS絕對定位CSS相對定位

2016-12-30 13:43:35

異步編程RxJava

2009-11-17 09:47:54

Oracle SQL語

2021-11-22 22:14:46

JavaScript開發(fā)模塊

2009-11-13 15:55:52

Oracle哈希連接

2022-08-04 18:50:12

Navigator瀏覽器設(shè)備

2021-03-02 08:11:34

Linux顏色代碼

2021-03-26 10:20:07

Linux文件代碼

2021-08-26 11:20:27

Linux文件代碼

2022-12-06 23:32:47

CSS語言LCH

2010-09-09 11:25:55

滾動條CSS

2010-01-12 10:23:52

路由最佳路徑
點贊
收藏

51CTO技術(shù)棧公眾號