J2.15.2forced colors设计研究

系统强制的高对比模式可能覆盖自定义颜色导致设计失真

别名: 强制色彩 · Windows contrast themes · forced-colors

概念解释

操作系统可以把页面上的自定义颜色换成一套系统高对比色板。按钮的品牌底色可能变成系统背景,描边可能消失,依赖品牌色才能看见的图标会一起没。强制高对比(forced colors)不是产品主题里的又一个深色开关,它会覆盖你写的颜色。设计在这一模式下失真是预期机制,要处理的是失真之后信息还在不在,而不是保住品牌色。

测了产品内的深色主题,不等于测了系统强制高对比。两套开关改写颜色的方式不同。

机制

强制色彩把 CSS 颜色映射到有限的系统色(文本、背景、链接、按钮边、高亮)。映射会丢掉你选的色相,只保留「这是文本 / 这是背景 / 这是按钮」这类角色。用背景色当唯一边界的卡片,映射之后可能与页面背景变成同一系统色,边界蒸发。用 box-shadow 当焦点环的控件,阴影往往不在映射表里,焦点图形会一起蒸发。为了保住品牌而写 forced-color-adjust: none 等于拒绝用户的对比色板,把强制模式的意义抵消掉。

失真本身不是缺陷。缺陷是:映射之后,按钮不再像按钮、链接不再像链接、焦点不再可见、状态不再可分。系统给的那几个角色色,必须还够用来辨认零件。

怎么研究

在 Windows 对比主题(或浏览器的强制色彩仿真)下打开产品,对照一张「自定义色被映射之后还剩下什么」的清单:按钮边、输入边、焦点、链接下划线、选中态、图标。

自变量:是否启用强制色彩、是否用 forced-color-adjust: none 锁住色板、控件边界是否依赖阴影或纯填充。 因变量:零件在映射后是否仍可辨认、焦点是否还在、有多少控件与背景融成一块。

不要只截一张首页。表单、菜单、对话框、选中的标签页在映射下失败率更高。把系统高对比与产品深色主题交叉:有人两套都开,有人只开系统那套。

边界

macOS 的增加对比度、iOS 的智能反转,与 Windows 对比主题不是同一管道,不能用其中一种代替另一种的结论。印刷、原生游戏全屏、部分 Canvas / WebGL 内容不受 CSS 映射约束,要走它们自己的高对比路径。用户选的是「低对比」而不是高对比时,这条覆盖机制不适用。邮件客户端对 HTML 邮件的强制色彩支持参差,网页上过了不等于收件箱里过了。

怎么落地

  • 在系统强制高对比下验收:控件要用系统能映射的边或焦点线,不要把唯一边界做成阴影或纯品牌填充。
  • 不要为了保住品牌色而关闭强制色彩调整;品牌在这一模式下本来就会让路。
  • 链接、焦点、选中在映射后仍要有非色相的形状(下划线、环、对钩),因为色相已经被换成系统色。
  • 验证:打开系统对比主题,走完登录或结账。每一个与背景融掉的按钮、每一个看不见的焦点、每一处关掉强制调整才「恢复」的品牌块,记为失真后信息丢失。

延伸

  • 同组J2.15.1 深色模式下的对比度需要重新计算而非沿用浅色模式数值 · J2.15.3 图片与图标资源需要针对深色背景准备适配版本 · J2.15.4 用户切换主题时的状态与焦点不应丢失
  • 相邻J2.06 焦点可见性 · J2.10 非文本对比度 · J5.13 系统级辅助功能设置
  • 站内检索forced colors · Windows contrast themes · forced-color-adjust

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J2.15.2