网站首页 > 技术文章 正文
相较于传统的手动调整色值,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 元素没必要强用 |
注意极端计算 | 如 calc(l - 90%) 可能导致视觉不协调 |
总结
CSS 中的 relative colors 是一个被严重低估却极具潜力的新特性:
- 减少代码重复,减少手动维护;
- 保证 UI 风格一致性;
- 改变颜色变体像写逻辑一样灵活;
- 已在大多数现代浏览器中得到支持。
不妨在下一个项目中尝试引入它,一行 CSS,带来意想不到的开发与维护便利。
让颜色管理进入“变量驱动 + 动态计算”的新阶段!
- 上一篇: APP界面设计思路(app界面设计过程)
- 下一篇: 涂在子弹头上的各种颜色,原来是这意思
猜你喜欢
- 2025-06-09 恭喜iPhone XR珊瑚色用户,你们提前买到了2019年最流行的颜色
- 2025-06-09 用前端实现“手电筒”效果,照亮世界!
- 2025-06-09 前端学不动了:ReactNative——2025年了,这玩意儿咋还在卷?
- 2025-06-09 莫兰特飞天遁地52分,让你想起了谁?
- 2025-06-09 20 个让人惊叹的 JavaScript 单行代码技巧,效率瞬间提升
- 2025-06-09 涂在子弹头上的各种颜色,原来是这意思
- 2025-06-09 可视化大屏的色彩密码:深色和浅色的对比与选择
- 2025-06-09 APP界面设计思路(app界面设计过程)
- 2024-09-29 Tailwind CSS v3.0发布,升级引擎,增加颜色等
- 2024-09-29 CSS 多色正方形上升效果 #web前端
你 发表评论:
欢迎- 502℃几个Oracle空值处理函数 oracle处理null值的函数
- 499℃Oracle分析函数之Lag和Lead()使用
- 496℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 486℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 479℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 474℃【数据统计分析】详解Oracle分组函数之CUBE
- 455℃Oracle有哪些常见的函数? oracle中常用的函数
- 452℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)