根本原因是设计稿用Display P3色域而浏览器默认sRGB,同一RGB值在不同色域下映射出的色彩不同;#FF6B6B在P3中为鲜亮珊瑚红,在sRGB中被压缩变灰。
#FF6B6B 在浏览器里看起来更灰?根本原因不是 CSS 写错了,也不是设计师给错值,而是设计稿(通常在 macOS / Figma / Sketch)和浏览器渲染默认使用了不同的颜色空间:设计软件多用 Display P 
#FF6B6B 在 P3 下是鲜亮的珊瑚红,在 sRGB 下就被“压缩”成偏暗、偏灰的版本。
color-scheme: light dark 不影响颜色值,但会影响系统级色彩管理这个 CSS 属性只告诉浏览器该适配哪套系统 UI 主题(比如让表单控件自动切深色),它不会触发颜色空间转换,也不会重解释 rgb() 或十六进制值。即使你写了:
body {
color-scheme: dark;
background: #FF6B6B;
}——#FF6B6B 依然按当前设备默认色彩空间(通常是 sRGB)解析和输出。真正起作用的是:
color-gamut 媒体查询 + color() 函数(仅 Chromium 117+ / Safari 16.4+ 支持)必须显式声明色彩空间,不能依赖默认行为。目前最可靠的方式是用 CSS color() 函数配合 display-p3:
.btn {
/* 设计稿中对应的 P3 坐标(需从设计工具导出或转换) */
background-color: color(display-p3 1.0 0.4196 0.4196);
}注意:不能直接把 sRGB 的 #FF6B6B 拿来套用 color(display-p3 ...)——那只是把 sRGB 值强行塞进 P3 坐标系,结果更不准。正确做法是:
@media (color-gamut: p3) {
.brand-red { background: color(display-p3 1.0 0.4196 0.4196); }
}
@else {
.brand-red { background: #FF6B6B; }
}很多团队试过 color(display-p3) 却发现没生效,大概率卡在这三点:
chrome://flags/#force-color-profile 并设为 display-p3(仅开发调试用,线上无效)color() 中的数值是线性光值(0–1),不是 gamma 校正后的 sRGB 值;直接填 color(display-p3 255 107 107) 是错的,会全黑真实项目里,P3 色彩目前仍属于“增强体验”,不是基础可用性保障。优先确保 sRGB 下可读、合规,再用媒体查询渐进增强。