搜尋

CSS 函式 ( 色彩模型 )

CSS 除了可以利用十六進位色碼和顏色名稱設定顏色,也能使用許多「色彩模型」的函式來定義指定顏色,這篇教學會介紹「色彩模型」相關的 CSS 函式,例如 rgb()、hsl()、lab()、lch()、color()、color-mix() 等等,透過不同色域或色彩數值的定義,讓網頁的顏色更加舒服鮮明。

CSS 教學 - CSS 函式 ( 色彩模型 )

「定義顏色」的 CSS 函式

下方列出「定義顏色」類型的 CSS 函式 ( 支援度 All 表示主流瀏覽器都支援 ):

定義顏色函式 說明 支援度
rgb() RGB 色彩模型 ( sRGB 色彩空間 )。 All
hsl() HSL 色彩模型 ( sRGB 色彩空間 )。 All
lab() Lab 色彩模型 ( CIELab 色彩空間 )。 All
lch() LCH 色彩模型 ( CIELab 色彩空間 )。 IE 不支援
oklab() OkLab 色彩模型 ( OkLab 色彩空間 )。 IE 不支援
oklch() OkLCH 色彩模型 ( OkLab 色彩空間 )。 IE 不支援
color() 指定色彩空間顏色。 IE 不支援
color-mix() 顏色混合。 IE 不支援
light-dark() 深色與淺色模式。 IE 不支援

rgb()

rgb()」是「RGB 色彩模型」CSS 函式,屬於 sRGB 色彩空間的顏色模型,下圖呈現 RGB 色彩模型 ( 參考「維基百科 RGB」 ):

CSS 教學 - CSS 函式 ( 色彩模型 ) - RGB 色彩模式

rgb() 具有三個必填參數和一個選填參數,寫法如下:

注意,如果是透過 SCSS 或 LESS 編譯 CSS,當用到 A 透度明參數時,需要寫成 rgba()

參數 數值範圍 說明
R 0~255 整數 紅色,0 沒有紅色,255 最多紅色。
G 0~255 整數 綠色,0 沒有綠色,255 最多綠色。
B 0~255 整數 藍色,0 沒有藍色,255 最多藍色。
A ( 選填 ) 0~1 浮點數 透明度,0 全透明,1 不透明。
div {color: rgb(R, G, B, A);}

下方的範例執行後,會使用 rgb() 設定 div 的邊框顏色、背景顏色和內容文字顏色。

線上展示:https://codepen.io/oxxo/pen/gOJLVme

<!-- HTML 程式碼 -->
<div>oxxo.studio</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border-style: solid;
    border-width: 10px;
    border-color: rgb(0, 0, 0, 0.5);  /* 邊框半透明黑 */
    color: rgb(255, 255, 255);        /* 文字全白 */
    background-color: rgb(255, 0, 0); /* 背景全紅 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - rgb()

hsl()

hsl()」是「HSL 色彩模式」CSS 函式,屬於 sRGB 色彩空間的顏色模型,下圖呈現 HSL 色彩模式 ( 參考「維基百科 HSL」 ):

CSS 教學 - CSS 函式 ( 色彩模型 ) - HSL 色彩模式

hsl() 具有三個必填參數和一個選填參數,寫法如下:

參數 數值範圍 說明
H 0~359 整數 色相 ( 角度 ),0 紅色,120 綠色,240 藍色。
S 0%~100% 浮點數 飽和度,0% 完全不飽和,100% 飽和。
L 0%~100% 浮點數 明度,0% 表示最暗,100% 最亮,50% 標準亮度。
A ( 選填 ) 0~1 浮點數 透明度,0 全透明,1 不透明。
div {color: hsl(H, S, L, A);}

下方的範例執行後,會使用 hsl() 設定 div 的邊框顏色、背景顏色和內容文字顏色。

線上展示:https://codepen.io/oxxo/pen/mdYONxL

<!-- HTML 程式碼 -->
<div>oxxo.studio</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border-width: 10px;
    border-style: solid;
    border-color: hsl(0, 0%, 0%, 0.5);     /* 邊框半透明黑 */
    color: hsl(0, 0%, 100%);               /* 文字全白 */
    background-color: hsl(120, 50%, 30%);  /* 背景深綠色 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - hsl()

lab()

lab()」是「Lab 色彩模型」CSS 函式,屬於 CIELab 色彩空間的顏色模型,下圖呈現 LAB 色彩模式 ( 參考「維基百科 Lab」 ):

CSS 教學 - CSS 函式 ( 色彩模型 ) - Lab 色彩模式

lab() 具有三個必填參數和一個選填參數,寫法如下 ( 沒有逗號且與 A 之間要有「/」斜線 ):

參數 數值範圍 說明
L 0~100 或 0%~100% 浮點數 亮度,0 最暗,100 最亮。
a -125~125 或 -100%~100% 浮點數 a 色軸,125 洋紅,-125 青綠色。
b -125~125 或 -100%~100% 浮點數 b 色軸,125 黃色,-125 藍紫色。
A ( 選填 ) 0~1 或 0%~100% 浮點數 透明度,0 全透明,1 不透明。
div {color: lab(L a b / A);}

下方的範例執行後,會使用 lab() 設定 div 的背景顏色。

線上展示:https://codepen.io/oxxo/pen/XWwprRe

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }

  .a {
    background-color: lab(100% 0 125);
  }

  .b {
    background-color: lab(100% -125 125 / 0.2); /* 加上透明度 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - lab()

lch()

lch()」是「LCH 色彩模型」CSS 函式,屬於 CIELab 色彩空間的顏色模型,下圖呈現 LCH 色彩模式 ( 參考「維基百科 LCH」 ):

CSS 教學 - CSS 函式 ( 色彩模型 ) - LCH 色彩模型

lch() 具有三個必填參數和一個選填參數,寫法如下 ( 沒有逗號且與 A 之間要有「/」斜線 ):

參數 數值範圍 說明
L 0~100 或 0%~100% 浮點數 亮度,0 最暗,100 最亮。
C 0~150 或 0%~100% 浮點數 飽和度,0% 不飽和,100% 飽和。
H 0~359 整數 色相 ( 角度 ),0 洋紅色,180 青綠色。
A ( 選填 ) 0~1 或 0%~100% 浮點數 透明度,0 全透明,1 不透明。
div {color: lab(L C H / A);}

下方的範例執行後,會使用 lab() 設定 div 的背景顏色。

線上展示:https://codepen.io/oxxo/pen/qBGRWmK

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }

  .a {
    background-color: lch(100% 100 0);
  }

  .b {
    background-color: lch(50% 50 180 / 0.3); /* 加上透明度 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - lch()

oklab()

oklab()」是「OkLab 色彩模型」CSS 函式,屬於 Oklab 色彩空間的顏色模型,Oklab() 可以在修改顏色的飽和度時保留色調與亮度,並建立平滑均勻的顏色漸層。Oklab() 具有三個必填參數和一個選填參數,寫法如下 ( 沒有逗號且與 A 之間要有「/」斜線 ):

參數 數值範圍 說明
L 0~1 或 0%~100% 浮點數 亮度,0 最暗,100 最亮。
a -0.4~0.4 或 -100%~100% 浮點數 a 色軸,100% 紅色,-100% 綠色。
b -0.4~0.4 或 -100%~100% 浮點數 b 色軸,100% 黃色,-100% 藍色。
A ( 選填 ) 0~1 或 0%~100% 浮點數 透明度,0 全透明,1 不透明。
div {color: oklab(L a b / A);}

下方的範例執行後,會使用 oklab() 設定 div 的背景顏色。

線上展示:https://codepen.io/oxxo/pen/JjqEPpB

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }

  .a {
    background-color: oklab(100% 100% 0%);
  }

  .b {
    background-color: oklab(0.3 -0.4 0.4 / 0.8); /* 加上透明度 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - oklab()

oklch()

oklch()」是「OkLCH 色彩模型」CSS 函式,屬於 Oklab 色彩空間的顏色模型,Oklch() 具有三個必填參數和一個選填參數,寫法如下 ( 沒有逗號且與 A 之間要有「/」斜線 ):

參數 數值範圍 說明
L 0~100 或 0%~100% 浮點數 亮度,0 最暗,100 最亮。
C 0~0.4 或 0%~100% 浮點數 飽和度,0% 不飽和,100% 飽和。
H 0~359 整數 色相 ( 角度 ),0 洋紅色,180 青綠色。
A ( 選填 ) 0~1 或 0%~100% 浮點數 透明度,0 全透明,1 不透明。
div {color: oklch(L C H / A);}

下方的範例執行後,會使用 oklch() 設定 div 的背景顏色。

線上展示:https://codepen.io/oxxo/pen/yLWgBEb

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }

  .a {
    background-color: oklch(100% 100% 50);
  }

  .b {
    background-color: oklch(0.3 0.2 0 / 0.5); /* 加上透明度 */
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - oklab()

color()

color()」是「指定色彩空間顏色」CSS 函式,透過指定色彩空間以及分色的數值設定顏色,color() 具有四個必填參數和一個選填參數,寫法如下 ( 沒有逗號且與 A 之間要有「/」斜線 ):

參數 數值範圍 說明
colorspace 色彩空間名稱 色彩空間。
c1 0~1 或 0%~100% 浮點數 色彩分量,0% 無,100% 全滿。
c2 0~1 或 0%~100% 浮點數 色彩分量,0% 無,100% 全滿。
c3 0~1 或 0%~100% 浮點數 色彩分量,0% 無,100% 全滿。
A ( 選填 ) 0~1 或 0%~100% 浮點數 透明度,0 全透明,1 不透明。
div {color: color(colorspace c1 c2 c3 / A);}

其中 colorspace 參數的的色彩空間名稱如下表所示:

色彩空間名稱 說明
srgb 又稱 standard RGB,是最常使用的色彩空間,主要用於大多數電子設備的顯示。雖然具有有限的色域,但是可以很好的呈現照片和一般畫面的色彩。
srgb-linear sRGB 色彩空間的線性版本,保留 sRGB 的色域,但響應曲線是線性的,而不是 sRGB 的伽瑪曲線,常用於圖形處理、顏色校正等需要線性色彩的情境。
display-p3 擴展的色彩空間,主要用於新一代的廣色域顯示設備,比 sRGB 表現更豐富的色彩。
a98-rgb Adobe 公司定義的較廣色域的色彩空間 ( AdobeRGB ),主要用於專業印刷領域,色域介於 sRGB 和 ProPhoto RGB 之間,適用於高品質的攝影和印刷。
prophoto-rgb 極為廣泛的色彩空間,涵蓋了人眼可見的大部分色域,主要用於專業的攝影和圖像編輯軟件中,可以表現非常豐富的色彩。
rec2020 非常廣泛的色彩空間,色域超出目前大多數顯示設備的顯示能力,是未來的理想色彩空間。
xyz、xyz-d50、xyz-d65 CIE 定義的標準的色彩空間,是許多其他色彩空間的基礎,三種色彩空間分別對應於不同的標準,應用於不同的場景。|

下方的範例執行後,會使用 color() 設定不同 div 的背景顏色 ( 仔細看顏色有些許差異 )。

線上展示:https://codepen.io/oxxo/pen/LYoxYEv

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>
<div class="c">c</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }
  .a {
    background-color: color(srgb-linear 0.5 1 0);
  }
  .b {
    background-color: color(display-p3 0.5 1 0);
  }
  .c {
    background-color: color(xyz 0.5 1 0);
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - color()

color-mix()

color-mix()」是「色彩模型裡的顏色混合」CSS 函式,透過指定色彩模型、要混合的顏色比例,就能混合出特定的顏色,color-mix() 具有三個必填參數和兩個選填參數,寫法如下:

參數 數值範圍 說明
method 色彩模型名稱 ( 參考上方 color 的名稱列表 ) 色彩模型,寫法為「in 色彩模型名稱」。
color1 顏色數值 要混合的第一種顏色。
p1 ( 選填 ) 0%~100% 浮點數 第一種顏色的比重,預設 50%,和 p2 相加需為 100%。
color2 顏色數值 要混合的第二種顏色。
p2 ( 選填 ) 0%~100% 浮點數 第一種顏色的比重,預設 50%,和 p2 相加需為 100%。
div {color: color-mix(in colorspace, color1, color2);}       /* 按照 50% 50% 混合 */
div {color: color-mix(in colorspace, color1 p1, color2 p2);} /* 按照比例混合 */

下方的範例執行後,會使用 color-mix() 設定不同 div 的背景顏色。

線上展示:https://codepen.io/oxxo/pen/YzbNzpP

<!-- HTML 程式碼 -->
<div class="a">a</div>
<div class="b">b</div>
<div class="c">c</div>
<div class="d">d</div>
<div class="e">e</div>
<div class="f">f</div>

<!-- CSS 程式碼 -->
<style>
  div {
    border: 1px solid black;
    margin: 10px;
    padding: 5px;
  }
  .a {
    background-color: color-mix(in srgb, blue 0%, white);
  }
  .b {
    background-color: color-mix(in srgb, blue 20%, white);
  }
  .c {
    background-color: color-mix(in srgb, blue 40%, white);
  }
  .d {
    background-color: color-mix(in srgb, blue 60%, white);
  }
  .e {
    background-color: color-mix(in srgb, blue 80%, white);
  }
  .f {
    background-color: color-mix(in srgb, blue 100%, white);
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - color-mix()

light-dark()

light-dark()」是「淺色或深色模式」CSS 函式,主要因應近年來網頁或行動裝置推出的「深色或淺色」模式瀏覽行為,函式裡可以指定一組「light 淺色」顏色和一組「dark 深色顏色」,接著就會根據瀏覽的深淺模式切換,寫法如下:

:root {
  color-scheme: light dark;  /* 根據使用者的設定 */
}
div {color: light-dark(light, dark);}

如果想要強制切換樣式,也可以參考下方的範例,執行後,不同的 div 裡會根據 light 和 dark 的不同,而產生不同的顏色 ( 通常不會這樣做,這種效果使用 CSS 選擇器才是標準做法 )。

線上展示:https://codepen.io/oxxo/pen/yLWgLPq

<!-- HTML 程式碼 -->
<div class="light">
  <ul>
    <li class="a">oxxo</li>
    <li class="b">apple</li>
    <li class="c">banana</li>
  </ul>
</div>
<div class="dark">
  <ul>
    <li class="a">oxxo</li>
    <li class="b">apple</li>
    <li class="c">banana</li>
  </ul>
</div>

<!-- CSS 程式碼 -->
<style>
  .light {
    color-scheme: light;
  }
  .dark {
    color-scheme: dark;
  }
  .a {
    background-color: light-dark(#f00, #0cf);
  }
  .b {
    background-color: light-dark(#f70, #09f);
  }
  .c {
    background-color: light-dark(#fa0, #06f);
  }
</style>

CSS 教學 - CSS 函式 ( 色彩模型 ) - light-dark()

小結

通常在設定 CSS 顏色時,大多用到十六進位色碼或 rgb() 就差不多處理完成,極少數的狀況才會用到其他的色彩模型函式,不過透過這篇文章,也了解到原來 CSS 支援這麼多種色彩模型,甚至還有提供 color-mix 混色和 light-dark() 深淺模式切換的功能,如果未來網站裡有需要,不妨好好的利用這些函式!

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

關鍵字與文字數值 長度與角度單位 顏色單位 位置名稱與時間單位

變數與內容函式

變數 數學計算 文字與清單計數 生成內容與引號

顏色與濾鏡

色彩模型 漸層色 影像濾鏡

文字樣式

使用通用字型 使用外部字型 @font-face 定義字型 文字尺寸 常用文字樣式 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 特殊文字樣式

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬度與高度 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 影像邊框 輪廓 ( outline ) 可見性與透明度 內容溢出與裁切

背景與陰影

背景顏色 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 定義計數規則 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 定位 ( position )

Flexbox 彈性排版

Flexbox 彈性盒子 Flexbox 對齊方式 Flexbox 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 動畫觸發事件 多重動畫的權重與順序

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask )