CSS 新特性 Relative Colors:用一行代碼解決顏色維護的大難題!
相較于傳統的手動調整色值,CSS 中新增的 relative colors
(相對顏色)功能,直接解決了多年來前端開發中顏色維護難、樣式重復多、效果不統一等一系列問題。
不夸張地說:這項功能,讓無數本來要寫 10 多行甚至上百行 JavaScript 的需求,現在只需要一行 CSS。
什么是 Relative Colors?
相對顏色,顧名思義,是基于已有顏色修改其某些成分(如亮度、透明度、色相等)來生成新的顏色。核心思想就是:定義一次,派生多個場景樣式。
示例:
:root {
--main-color: #0066cc;
--hover-color: color-mix(in srgb, var(--main-color), white 20%);
}
含義是:將 --main-color
與白色按 80:20 的比例混合,生成懸停時使用的 --hover-color
。以后只需修改 --main-color
,其他派生顏色都會自動更新。
為什么推薦使用相對顏色?
優勢 | 說明 |
避免重復 | 無需為每個場景重復寫一堆相近的顏色值 |
易于維護 | 基準色值一改,所有衍生樣式自動跟隨 |
保持一致性 | 視覺風格始終統一,避免“看起來差不多”的偏差 |
Relative Color 的語法結構
CSS 支持以下語法:
hsl(from <源顏色> h s l / alpha)
rgb(from <源顏色> r g b / alpha)
支持的顏色模型:
hsl()
、rgb()
lab()
、lch()
、oklab()
(更現代的模型,適合高級配色)
關鍵點:
from
語法表示“從某個已有顏色取值”- 可選擇重用部分值或修改特定通道
- 支持
calc()
用于亮度或透明度的動態調整
示例:修改亮度
hsl(from var(--button-color) h s calc(l + 10%))
這段代碼代表從 --button-color
中提取色相與飽和度,僅對亮度進行+10%的調整。
實戰場景:統一按鈕懸停樣式
傳統做法中,每種按鈕顏色都需要單獨定義懸停態,如下:
.button-blue:hover { background-color: #007fff; }
.button-green:hover { background-color: #3fb96e; }
.button-red:hover { background-color: #e04c4c; }
這種方式冗長、難維護。
相對顏色版本:
:root {
--btn-blue: hsl(220, 100%, 50%);
--btn-green: hsl(140, 70%, 45%);
--btn-red: hsl(0, 80%, 55%);
--btn-yellow: hsl(45, 100%, 50%);
}
.button {
color: white;
border: none;
padding: 10px20px;
cursor: pointer;
}
.button.blue { --button-color: var(--btn-blue); }
.button.green { --button-color: var(--btn-green); }
.button.red { --button-color: var(--btn-red); }
.button.yellow { --button-color: var(--btn-yellow); }
.button.blue,
.button.green,
.button.red,
.button.yellow {
background-color: var(--button-color);
}
/* 通用 hover 樣式 */
.button:hover {
background-color: hsl(from var(--button-color) h s calc(l + 10%));
}
這樣,無論有多少按鈕,只需定義一個懸停樣式,統一且易維護。
瀏覽器支持情況
截至 2025 年,以下瀏覽器已支持 relative colors:
瀏覽器 | 最低版本 |
Chrome | v119+ |
Edge | v119+ |
Firefox | v128+ |
Safari | v18.0+(桌面與 iOS 均支持) |
使用時的注意事項
注意點 | 說明 |
不支持舊瀏覽器 | IE 或老版本瀏覽器無兼容,建議進行回退處理 |
用于需要變動的顏色 | 對于固定色值的 UI 元素沒必要強用 |
注意極端計算 | 如 |
總結
CSS 中的 relative colors
是一個被嚴重低估卻極具潛力的新特性:
- 減少代碼重復,減少手動維護;
- 保證 UI 風格一致性;
- 改變顏色變體像寫邏輯一樣靈活;
- 已在大多數現代瀏覽器中得到支持。
不妨在下一個項目中嘗試引入它,一行 CSS,帶來意想不到的開發與維護便利。
讓顏色管理進入“變量驅動 + 動態計算”的新階段!??