rgb()

Baseline 廣泛可用 *

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

* 此特性的某些部分可能存在不同級別的支援。

備註:rgba() 函式式表示法是 rgb() 的別名,兩者完全相同。建議使用 rgb()

rgb() 函式式表示法根據紅、綠、藍三個分量,在 sRGB 色彩空間中表示一種顏色。一個可選的 alpha 分量表示顏色的透明度。

試一試

background: rgb(31 120 50);
background: rgb(30% 20% 50%);
background: rgb(255 122 127 / 80%);
background: rgb(255 122 127 / 0.2);
<section id="default-example">
  <div class="transition-all" id="example-element"></div>
</section>
#example-element {
  min-width: 100%;
  min-height: 100%;
  padding: 10%;
}

語法

css
/* Absolute values */
rgb(255 255 255)
rgb(255 255 255 / 50%)

/* Relative values */
rgb(from green r g b / 0.5)
rgb(from #123456 calc(r + 40) calc(g + 40) b)
rgb(from hwb(120deg 10% 20%) r g calc(b + 200))

/* Legacy 'rgba()' alias */
rgba(0 255 255)

/* Legacy format */
rgb(0, 255, 255)
rgb(0, 255, 255, 50%)

備註:出於相容性原因,如果 alpha 通道的值正好為 1,Web API 序列化的顏色值會表示為 rgb() 顏色,否則表示為 rgba() 顏色。在這兩種情況下,都使用舊式語法,即以逗號作為分隔符(例如 rgb(255, 0, 0))。

下面描述了絕對顏色和相對顏色的允許值。

絕對值語法

rgb(R G B[ / A])

引數如下:

RGB

每個值都可以表示為 0255 之間的 <number>0%100% 之間的 <percentage>,或者關鍵字 none(在這種情況下等同於 0%)。這些值分別代表紅色、綠色和藍色通道。

A 可選

一個 <alpha-value>,表示顏色的 alpha 通道值,其中數字 0 對應 0%(完全透明),1 對應 100%(完全不透明)。此外,關鍵字 none 可用於明確指定無 alpha 通道。如果未明確指定 A 通道值,則預設為 100%。如果包含該值,則其前面需要有一個斜槓(/)。

備註:有關 none 的效果,請參閱缺失的顏色分量

相對值語法

rgb(from <color> R G B[ / A])

引數如下:

from <color>

在定義相對顏色時,總是包含關鍵字 from,其後跟著一個 <color> 值,表示源顏色:這是相對顏色所基於的原始顏色。源顏色可以是任何有效的 <color> 語法,包括另一個相對顏色。

RGB

每個值都可以表示為 0255 之間的 <number>0%100% 之間的 <percentage>,或者關鍵字 none(在這種情況下等同於 0%)。這些值分別代表輸出顏色的紅色、綠色和藍色通道的值。

A 可選

一個 <alpha-value>,表示輸出顏色的 alpha 通道值,其中數字 0 對應 0%(完全透明),1 對應 100%(完全不透明)。此外,關鍵字 none 可用於明確指定無 alpha 通道。如果未明確指定 A 通道值,則預設為源顏色的 alpha 通道值。如果包含該值,則其前面需要有一個斜槓(/)。

備註:為了完全支援表示可見顏色的整個光譜,相對 rgb() 顏色函式的輸出被序列化為 color(srgb)。這意味著透過 HTMLElement.style 屬性或 CSSStyleDeclaration.getPropertyValue() 方法查詢輸出顏色值時,會返回一個 color(srgb ...) 格式的輸出顏色值。

定義相對顏色輸出通道分量

rgb() 函式內部使用相對顏色語法時,瀏覽器會將源顏色轉換為等效的 RGB 顏色(如果尚未指定為 RGB 顏色)。該顏色被定義為三個不同的顏色通道值——r(紅)、g(綠)和 b(藍)——外加一個 alpha 通道值(alpha)。這些通道值在函式內部可用,用於定義輸出顏色的通道值。

  • rgb 的值都將被解析為 0255(含)之間的 <number>
  • alpha 通道值解析為一個介於 01(含)之間的 <number>

在定義相對顏色時,輸出顏色的不同通道可以用幾種不同的方式表示。下面,我們將透過一些示例來說明這些方式。

在下面的前兩個示例中,我們使用了相對顏色語法。然而,第一個示例輸出的顏色與源顏色相同,而第二個示例輸出的顏色則完全不基於源顏色。它們並沒有真正建立相對顏色!你不太可能在實際的程式碼庫中使用這些,而可能會直接使用絕對顏色值。我們包含這些示例,是為了作為學習相對 rgb() 語法的起點。

讓我們從一個源顏色 hsl(0 100% 50%)(等同於 rgb(255 0 0))開始。下面的函式輸出與源顏色相同的顏色——它使用源顏色的 rgb 通道值(25500)作為輸出通道值。

css
rgb(from hsl(0 100% 50%) r g b)

該函式的輸出顏色是 sRGB 中 rgb(255 0 0)color() 等效表示:color(srgb 1 0 0)

下一個函式對輸出顏色的通道值使用絕對值,輸出了一個完全不同於源顏色的新顏色:

css
rgb(from hsl(0 100% 50%) 132 132 224)

在上述情況下,輸出顏色是 sRGB 中 rgb(132 132 224)color() 等效表示:color(srgb 0.517647 0.517647 0.878431)

以下函式建立了一個基於源顏色的相對顏色:

css
rgb(from hsl(0 100% 50%) r 80 80)

此示例:

  • 將源顏色(hsl(0 100% 50%))轉換為其 rgb() 等效表示(rgb(255 0 0))。
  • 將輸出顏色的 R 通道值設定為源顏色 rgb() 等效表示的 R 通道值——255
  • 將輸出顏色的 GB 通道值設定為不基於源顏色的新值:分別為 8080

最終的輸出顏色是在 sRGB 色彩空間中等同於 rgb(255 80 80) 的顏色——color(srgb 1 0.313726 0.313726)

備註:如上所述,如果輸出顏色使用的顏色模型與源顏色不同,源顏色會在後臺被轉換為與輸出顏色相同的模型或空間,以便能以相容的方式(即使用相同的通道)表示。

在本節我們目前看到的示例中,源顏色和輸出顏色的 alpha 通道都沒有被明確指定。當未指定輸出顏色的 alpha 通道時,它預設為與源顏色 alpha 通道相同的值。當未指定源顏色的 alpha 通道時(且它不是相對顏色),它預設為 1。因此,上述示例中的源和輸出 alpha 通道值均為 1

讓我們看一些指定源和輸出 alpha 通道值的示例。第一個示例將輸出 alpha 通道值指定為與源 alpha 通道值相同,而第二個示例則指定一個與源 alpha 通道值無關的不同輸出 alpha 通道值。

css
rgb(from hsl(0 100% 50% / 0.8) r g b / alpha)
/* Computed output color: color(srgb 1 0 0 / 0.8) */

rgb(from hsl(0 100% 50% / 0.8) r g b / 0.5)
/* Computed output color: color(srgb 1 0 0 / 0.5) */

在下面的示例中,hsl() 源顏色再次被轉換為 rgb() 表示——rgb(255 0 0)。然後對 RGBA 值應用 calc() 計算。計算後,R、G、B 和 A 的值分別為 127.5251750.9。最終的輸出顏色是在 sRGB 色彩空間中等同於 rgb(127.5 25 175 / 0.9) 的顏色:color(srgb 0.5 0.0980392 0.686275 / 0.9)

css
rgb(from hsl(0 100% 50%) calc(r/2) calc(g + 25) calc(b + 175) / calc(alpha - 0.1))

備註:因為源顏色通道值被解析為 <number> 值,所以在使用它們進行計算時,你必須給它們加上數字,即使在通道通常接受 <percentage><angle> 或其他值型別的情況下也是如此。例如,將 <percentage> 新增到 <number> 是行不通的。

正式語法

<rgb()> = 
<legacy-rgb-syntax> |
<modern-rgb-syntax>

<legacy-rgb-syntax> =
rgb( <percentage>#{3} , <alpha-value>? ) |
rgb( <number>#{3} , <alpha-value>? )

<modern-rgb-syntax> =
rgb( [ from <color> ]? [ <number> | <percentage> | none ]{3} [ / [ <alpha-value> | none ] ]? )

<alpha-value> =
<number> |
<percentage>

示例

基本語法

在此示例中,我們有三個 <div> 元素,它們在條紋背景上顯示不同的背景顏色。

HTML

html
<div>
  <div id="integer"></div>
  <div id="percent"></div>
  <div id="alpha"></div>
</div>

CSS

背景顏色使用 rgb() 顏色函式設定。這三種顏色是相同的。第三種是半透明的,因此我們在 <body> 上添加了一個 repeating-linear-gradient(),以更好地展示 alpha 通道的透明度。

css
body {
  background: repeating-linear-gradient(-45deg, #eeeeee 0 2px, white 2px 6px);
  padding: 10px;
}

#integer {
  background-color: rgb(189 85 218);
}

#percent {
  background-color: rgb(74% 33% 85%);
}

#alpha {
  background-color: rgb(189 85 218 / 0.25);
}

結果

在 rgb() 中使用相對顏色

此示例為三個 <div> 元素設定了不同的背景顏色。左邊的元素被賦予了未經修改的 --base-color,而中間和右邊的元素則被賦予了 --base-color 的變體,這些變體依次從紅色通道中減去更多值,並向藍色通道中新增更多值。

這些變體是使用相對顏色定義的——將 --base-color 自定義屬性傳入 rgb() 函式,並透過 calc() 函式修改輸出顏色的紅色和藍色通道以達到預期效果,而綠色通道保持不變。

CSS

css
:root {
  --base-color: orange;
  /* equal to rgb(255 165 0) */
}

#one {
  background-color: var(--base-color);
}

#two {
  background-color: rgb(from var(--base-color) calc(r - 76.5) g calc(b + 76.5));
  /* 76.5 is 30% of 255 */
}

#three {
  background-color: rgb(from var(--base-color) calc(r - 153) g calc(b + 153));
  /* 153 is 60% of 255 */
}

/* Use @supports to add in support for old syntax that requires r g b values to
   be specified as percentages (with units) in calculations. This is required
   for Safari 16.4+. */
@supports (color: rgb(from red r g calc(b + 30%))) {
  #two {
    background-color: rgb(from var(--base-color) calc(r - 30%) g calc(b + 30%));
  }

  #three {
    background-color: rgb(from var(--base-color) calc(r - 60%) g calc(b + 60%));
  }
}

結果

舊式語法:逗號分隔值

由於歷史原因,rgb() 函式接受一種所有值都用逗號分隔的形式。

HTML

html
<div class="space-separated"></div>
<div class="comma-separated"></div>

CSS

css
div {
  width: 100px;
  height: 50px;
  margin: 1rem;
}

div.space-separated {
  background-color: rgb(255 0 0 / 50%);
}

div.comma-separated {
  background-color: rgb(255, 0, 0, 0.5);
}

結果

規範

規範
CSS 顏色模組第五版
# 相對 RGB
CSS 顏色模組第四版
# rgb-functions

瀏覽器相容性

另見