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

探索 CSS 顏色的新功能!你真的掌握了嗎?

開(kāi)發(fā) 前端
CSS Colors Module Level 4:旨在擴(kuò)展 CSS 中顏色相關(guān)的特性和功能。它提供了一些新的顏色表示方式、自定義調(diào)色板、透明度的控制等功能,并且對(duì) CSS 中現(xiàn)有的顏色模塊作出了一些修改和增強(qiáng)。CSS Colors Module Level 4 目前還處于候選推薦階段,尚未正式發(fā)布為 W3C 推薦標(biāo)準(zhǔn)。

現(xiàn)在越來(lái)越多的瀏覽器開(kāi)始支持 CSS Colors Module Level 4[1] 規(guī)范中定義的功能,其中包括在 CSS 中操作和顯示顏色的多種方式。本文就來(lái)看看什么是顏色空間、如何在CSS中定義顏色,CSS Colors Module Level 4 中的新內(nèi)容,以及如何在項(xiàng)目中使用顏色函數(shù)和特性。

CSS Colors Module Level 4:旨在擴(kuò)展 CSS 中顏色相關(guān)的特性和功能。它提供了一些新的顏色表示方式、自定義調(diào)色板、透明度的控制等功能,并且對(duì) CSS 中現(xiàn)有的顏色模塊作出了一些修改和增強(qiáng)。CSS Colors Module Level 4 目前還處于候選推薦階段,尚未正式發(fā)布為 W3C 推薦標(biāo)準(zhǔn)。

顏色空間

顏色空間是基于定義的顏色模型對(duì)顏色進(jìn)行分組的系統(tǒng)。顏色空間提供了一種清晰和一致的方式來(lái)描述顏色,并且可以在保持外觀不變的情況下將顏色轉(zhuǎn)換到不同的顏色空間中。

在 CSS Colors Module Level 4 之前,CSS 中的顏色是在 RGB(紅、綠、藍(lán))顏色空間和色域(顏色總范圍)中定義的。

圖片

通過(guò) CSS 對(duì) HSL(色調(diào)、顏色和亮度)的支持,我們可以使用相同的 RGB 模型來(lái)定義顏色。

在 CSS 中定義 RGB 顏色

要在 RGB 顏色空間中生成顏色,可以以不同方式混合原色紅色、綠色和藍(lán)色以獲得所需的結(jié)果。 可以把它想象成立方體中一個(gè)點(diǎn)的坐標(biāo),其中每個(gè)軸代表一種原色。

.red {
  color: rgb(255 0 0);
}
.green {
  color: rgb(0 255 0);
}
.blue {
  color: rgb(0 0 255);
}
/* 黃色是紅色和綠色的混合 */
.yellow {
  color: rgb(255 255 0);
}
/* 青色是綠色和藍(lán)色的混合 */
.cyan {
  color: rgb(0 255 255);
}

要想在 CSS 中定義 RGB 顏色,可以選擇使用顏色關(guān)鍵字(如 red 或 blue)、十六進(jìn)制值 (#ff0000) 或 rgb() 函數(shù)來(lái)定義紅色、綠色和藍(lán)色值,如上所示。

從 CSS Colors Module Level 4 開(kāi)始,我們不再需要使用 rgba() 來(lái)定義具有 alpha 通道的 RGB 顏色,因?yàn)?nbsp;rgb() 支持由斜線 (/) 分隔的 alpha 值,如下所示。

.named-color {
  color: red;
}
.hex-color {
  color: #ff0000;
}
.rgb-color {
  color: rgb(255 0 0);
}
/* makes the color 50% transparent */
.rgba-semi-transparent {
  color: rgb(255 0 0 / 0.5);
}

這里說(shuō)明了如何使用關(guān)鍵字、十六進(jìn)制值和 rgb() 函數(shù)定義相同的顏色,包括定義不透明。

使用 HSL 選擇色調(diào)

CSS 顏色(第 3 級(jí))中的 HSL 受到許多開(kāi)發(fā)人員的歡迎,因?yàn)楦鶕?jù)色輪選擇色調(diào)會(huì)更加直觀。我們可以使用 conic-gradient() 函數(shù)和 hsl() 函數(shù)制作色輪。

#color-wheel {
  border-radius: 50%;
  background: conic-gradient(
    in hsl longer hue,
    hsl(0deg 100% 50%),
    hsl(360deg 100% 50%)
  );
}
/* 對(duì)于不支持 conic-gradient 方法的瀏覽器 */
@supports not (background: conic-gradient(in hsl longer hue)) {
  #color-wheel {
    background: conic-gradient(red, yellow, green, cyan, blue, magenta, red);
  }
}

<div id="color-wheel"></div>

結(jié)合這兩個(gè)片段就可以制作一個(gè)色輪,循環(huán)顯示 RGB 顏色空間中所有可用的色調(diào):

圖片

hsl() 函數(shù)的工作方式與 rgb() 函數(shù)類(lèi)似,但接受色相作為色輪上的角度,接受飽和度和亮度作為值。 與 rgb() 一樣,可以向 hsl() 添加透明度(或不透明度)的 alpha 通道,這使得 hsla() 與 rgba() 一起成為遺留函數(shù):

.red-hsl {
  color: hsl(0 100% 50%);
}
.green-hsl {
  color: hsl(120 100% 50%);
}
/* 使顏色 50% 不透明 */
.green-hsl {
  color: hsl(120 100% 50% / 0.5);
}

HSL 函數(shù)還可以通過(guò)更改飽和度和亮度來(lái)改變顏色。 例如,如果為網(wǎng)站主題選擇了特定顏色,可以修改顏色的飽和度和亮度以創(chuàng)建仍然適合主題的輔助顏色。 如下圖所示:

.button {
  color: hsl(200 100% 70%);
}
/* 按鈕顏色的深色版本 */
.button--secondary {
  color: hsl(200 100% 50%);
}
/* 較低的飽和度使按鈕不那么生動(dòng) */
.button--inactive {
  color: hsl(200 50% 70%);
}

CSS Colors Module Level 4 中的新內(nèi)容

此規(guī)范版本添加了許多使用不同方式表示顏色的新顏色函數(shù),它們?cè)试S使用色調(diào)、亮度和飽和度等屬性指定顏色。新的顏色函數(shù)使我們能夠使用 RGB 色域之外的更鮮艷的顏色,因此在受支持的顯示器上可以使用更大范圍的顏色。

支持更多色彩空間和色域

通過(guò)對(duì)額外空間和色域的支持,不再局限于在 RGB 顏色空間中描述顏色; 現(xiàn)在可以使用 Display P3、CIELAB、Oklab 色彩空間。

Display P3 使用 P3 色域并代表比 sRGB(標(biāo)準(zhǔn) RGB)更寬的顏色范圍。它對(duì)于現(xiàn)代顯示器中使用的更鮮艷的顏色很有用。但是,需要為使用不支持它的設(shè)備的用戶提供回退。

CIELAB 是一種統(tǒng)一色彩空間 (UCS),它根據(jù)人眼感知顏色的方式來(lái)定義顏色。該模型的主要目的是讓顏色空間中兩點(diǎn)之間相同的顏色距離對(duì)于觀察者來(lái)說(shuō)應(yīng)該呈現(xiàn)出相同的差異。

Oklab 是一個(gè)較新的顏色空間,它使用與 CIELAB 相同的模型結(jié)構(gòu),但通過(guò)“視覺(jué)上相似顏色的數(shù)據(jù)集的數(shù)值優(yōu)化”制成,因此值旨在比 CIELAB 更準(zhǔn)確。

CIELAB 和 Oklab 顏色空間可以表示為三維空間,如下所示:

圖片

全新顏色函數(shù)

新的顏色函數(shù)有助于描述上面提到的顏色空間中的值。

lab() 函數(shù)使用顏色空間中沿“a”和“b”軸的亮度、紅色/綠色和黃色/藍(lán)色來(lái)描述 CIELAB 顏色。

.lab-red {
  color: lab(87.6 125 104);
}
.lab-green {
  color: lab(87.8 -79 81);
}

lch() 函數(shù)符號(hào)使用亮度、色度和色調(diào)描述 CIELAB 顏色。色調(diào)是色輪上代表顏色的角度。

.lch-red {
  color: lch(54.3 107 40.9deg);
}
.lch-green {
  color: lch(87.8 113 134deg);
}

oklab() 函數(shù)使用 Oklab 顏色空間中沿“a”和“b”軸的亮度、紅色/綠色和黃色/藍(lán)色來(lái)描述 Oklab 顏色。

.oklab-red {
  color: oklab(0.63 0.22 0.13);
}
.oklab-green {
  color: oklab(0.87 -0.2 0.18);
}

除了新的顏色空間外,HWB 顏色還有一個(gè) hwb() 函數(shù),使用色調(diào)、白度和黑度定義。 HWB 使用 RGB 顏色空間,與 HSL 類(lèi)似,但考慮的是白度和黑度,而不是飽和度和亮度:

.hwb-red {
  color: hwb(0deg 0% 0%);
}
.hwb-light-red {
  color: hwb(0deg 30% 0%);
}
.hwb-dark-red {
  color: hwb(0deg 0% 30%);
}
/* 循環(huán)色輪 */
.hwb-green {
  color: hwb(120deg 0% 0%);
}
.hwb-blue {
  color: hwb(240deg 0% 0%);
}

color() 函數(shù)可以在預(yù)定義的顏色空間中指定顏色:

.green-display-p3 {
  color: color(display-p3 0 1 0);
}
.blue-rec2020 {
  color: color(rec2020 0 0 1);
}
.blue-srgb {
  color: color(srgb 0 0 1);
}

還可以將 color() 函數(shù)與媒體查詢結(jié)合起來(lái)以指定后備顏色空間:

.green-display-p3 {
  color: color(display-p3 0 1 0);
}
@media (color-gamut: srgb) {
  .green-display-p3 {
    color: color(srgb 0 1 0);
  }
}

顏色函數(shù)的語(yǔ)法更改

rgb() 和 hsl() 函數(shù)的語(yǔ)法已更改,目的是使它們更易于使用。 不再需要分隔值的逗號(hào),以使用斜杠指定顏色的 alpha 值:

/* 舊語(yǔ)法 */
rgb(255, 0, 0);
hsl(0, 100%, 50%);

/* 新語(yǔ)法 */
rgb(255 0 0);
hsl(0 100% 50%);

/* 帶有 alpha 通道的新語(yǔ)法 */
rgb(255 0 0 / 0.5);
hsl(0 100% 50% / 0.5);

所有新函數(shù)都使用上述類(lèi)型的語(yǔ)法,在值之間沒(méi)有分隔逗號(hào),并使用斜杠將 alpha 通道與顏色值分隔開(kāi)。

色調(diào)插值

插值是當(dāng)計(jì)算兩個(gè)已知值之間的一個(gè)或多個(gè)值時(shí),因此如果有從紅色到藍(lán)色的漸變,插值就是計(jì)算哪些顏色在紅色和藍(lán)色之間的范圍內(nèi)的方式。 創(chuàng)建 linear-gradient() 或類(lèi)似的 CSS 漸變時(shí),可以使用 in(用于插值)后跟漸變的顏色空間:

.hsl {
  background: linear-gradient(in hsl, blue, red);
}

比較不同顏色空間中的漸變

可以通過(guò)一個(gè)例子來(lái)比較不同顏色空間中的漸變,在標(biāo)準(zhǔn) RGB 顏色空間中有一個(gè)從藍(lán)色到紅色的漸變,然后在不同的顏色空間中有相同的漸變:

.rgb {
  background: linear-gradient(to right, blue, red);
}

.hsl {
  background: linear-gradient(in hsl to right, blue, red);
}

.lch {
  background: linear-gradient(in lch to right, blue, red);
}

.lab {
  background: linear-gradient(in lab to right, blue, red);
}

.oklch {
  background: linear-gradient(in oklch to right, blue, red);
}

.oklab {
  background: linear-gradient(in oklab to right, blue, red);
}

在漸變中使用色調(diào)插值模式

有一些插值模式控制色輪周?chē)姆较?,色調(diào)應(yīng)該在具有色調(diào)角度的顏色空間中插值:

<div class="hsl in-function">
  <p>HSL</p>
</div>
<div class="hsl-named in-function">
  <p>HSL named</p>
</div>

<div class="hsl-longer in-function">
  <p>HSL (longer)</p>
</div>
<div class="hsl-named-longer in-function">
  <p>HSL named (longer)</p>
</div>

<div class="fallback">
  <p>Standard fallback</p>
</div>
/* 從 39度到 60 度,繞色輪取最短路徑 */
.hsl {
  background: linear-gradient(
    to right in hsl,
    hsl(39deg 100% 50%),
    hsl(60deg 100% 50%)
  );
}
/* 也可以使用命名顏色 */
.hsl-named {
  background: linear-gradient(to right in hsl, orange, yellow);
}

/* 這個(gè)漸變?cè)谏喼車(chē)ㄟ^(guò) 0 循環(huán)回來(lái) */
.hsl-longer {
  background: linear-gradient(
    to right in hsl longer hue,
    hsl(39deg 100% 50%),
    hsl(60deg 100% 50%)
  );
}

/* 使用命名顏色可以實(shí)現(xiàn)相同的效果 */
.hsl-named-longer {
  background: linear-gradient(to right in hsl longer hue, orange, yellow);
}

/* 對(duì)于不支持插值模式的瀏覽器 */
.fallback {
  background: linear-gradient(to right, blue, red);
}

圖片

瀏覽器支持

CSS Colors Module Level 4 中描述的大部分語(yǔ)法都在最新版本的 Chrome 和 Safari 中得到支持,而顏色函數(shù)的支持也將在 Firefox 113 中發(fā)布。在上述示例中指定線性漸變中的顏色空間和插值模式在 Chrome 和 Safari 中受支持,但是在 Firefox 中還沒(méi)有支持。

未來(lái)

CSS Color Module Level 5 包含了一個(gè) color-mix() 函數(shù),它可以使用指定的權(quán)重混合兩種顏色,此函數(shù)已在多個(gè)瀏覽器中得到支持。 在 color() 函數(shù)中,將能夠使用使用 color(--my-color-space 0 0 0) 定義的自定義顏色空間,該顏色空間使用 @color-profile 規(guī)則從外部文件加載。

.plum-pink-mix {
  color: color-mix(in lch, plum, pink);
}

/* 自定義顏色空間 */
@color-profile --example-color-space {
  src: url("https://example.org/my-color-profile.icc");
}
.header {
  background-color: color(--example-color-space 10% 20% 30%);
}

參考資料

[1]CSS Colors Module Level 4: https://www.w3.org/TR/css-color-4/。

[2]https://developer.mozilla.org/en-US/blog/css-color-module-level-4/。

責(zé)任編輯:姜華 來(lái)源: 前端充電寶
相關(guān)推薦

2022-10-09 09:30:33

CSS瀏覽器十六進(jìn)制

2019-07-11 10:45:34

MQ中間件 API

2024-01-03 08:08:51

Pulsar版本數(shù)據(jù)

2013-03-06 10:03:25

Open WebHTML5CSS3

2022-09-26 08:49:11

Java架構(gòu)CPU

2024-12-17 08:33:42

2016-09-27 19:53:25

IOS 10蘋(píng)果

2013-07-15 16:55:45

2010-08-04 15:01:00

2020-09-01 10:32:52

iOS微信新功能

2020-04-14 15:30:00

微信群管理朋友圈

2020-11-11 07:52:04

CSS功能瀏覽器

2023-11-16 08:49:25

PyQt6窗口對(duì)象

2024-08-13 08:30:13

2019-08-13 08:43:07

JavaScript前端面試題

2022-07-08 09:27:48

CSSIFC模型

2022-12-13 08:23:25

CSS前端漸變

2022-04-01 08:48:45

JavaPythonRuby

2020-06-29 08:32:21

高并發(fā)程序員流量

2018-03-19 10:39:28

Java序列化對(duì)象
點(diǎn)贊
收藏

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