J5.13.1inherit OS accessibility settings设计研究

操作系统提供的辅助功能设置应被应用继承而非重新实现一套

别名: 系统辅助设置 · prefers-reduced-motion · Dynamic Type · 继承系统设置

概念解释

字号、粗体、对比、减少动效、是否朗读屏幕,用户已经在操作系统里设过一次。应用要做的是读这些偏好并继承(inherit OS accessibility settings):Web 上的 prefers-reduced-motionprefers-contrastprefers-color-scheme,iOS 的 Dynamic Type 与 Reduce Motion,Android 的 Font scale 与动画时长缩放。另做一套应用内的「无障碍开关」去复刻这些能力,等于要求用户在每个产品里再设置一遍,而且两套值从第一天起就会分叉。

继承不是「做个跟随系统的主题开关」那么窄。它是把系统已经表达过的身体与情境条件,当成应用排版和运动的输入,而不是再发明一份平行的控制面。

机制

操作系统把辅助偏好暴露成平台 API 和媒体查询,正是为了让所有前台应用共用同一份用户模型。用户在系统里把字号拧到最大,是在对所有应用说话。应用如果只用自己的 font-size: 14px 和自己的动效时间轴,等于把这份用户模型丢在门口。重新实现的那一套还要维护开关、存储、迁移,并且永远赶不上系统新增的项(如每页减少动画、区分不靠颜色、关闭闪烁)。

第二层是信任。辅助功能设置是跨应用的契约:用户改一次,期望走进任何应用都还在。应用另起炉灶,用户无法判断「这里听谁的」。继承把契约保持为一条;平行实现把契约拆成 N 条,每一条都可能是错的。

怎么研究

在系统里打开加大字号、减少动效、增强对比,分别打开一个「声称跟随系统」的应用和一个「有自己无障碍页」的应用,记录哪些系统项被映射、哪些被忽略、应用内开关的默认值是否等于系统当前值。Web 用浏览器的媒体查询仿真;原生用辅助功能检查器读 trait / Configuration。

自变量:系统偏好组合、应用是否声明继承、是否另有内置开关。 因变量:实际字号/动效/对比是否随系统变、映射覆盖了系统的哪几项、用户能否说出「此刻生效的是哪一套」。

边界

游戏、绘图、地图有时必须锁住视口单位,不能无上限跟着 Dynamic Type 涨;这时继承的方式是提供「按系统缩放界面控件、内容区另有阅读模式」,而不是完全不读系统。嵌入式 WebView 未必能收到外壳应用已经读过的偏好,需要把系统值往里传。企业托管设备可能锁死系统项,应用再提供一个本地覆盖是逃生门,不是默认路径。系统没有的能力(如「简化语言」)本来就不存在可继承的源,应用自己做一档不算平行复刻。

怎么落地

  • 字号接到 Dynamic Type / Font scale / 浏览器默认字体,而不是写死像素;动效用 prefers-reduced-motion 把非必要动画变成切切或缩短。
  • 对比与配色跟 prefers-contrast、系统高对比、深色模式走,不要只在应用里做一套皮肤。
  • 应用内若要提供「比系统更大」,做成叠加在系统值之上的偏移,而不是替换。
  • 验证:只改系统设置、不碰应用,打开应用看字号、动效、对比是否已经变。系统加大、应用仍是设计稿上的 14px,就是没有继承。把系统减少动效打开,看启动动画和页面切换还在不在跑满时长。

延伸

  • 同组J5.13.2 忽略系统级设置(字号、动效减弱、对比度)会造成体验割裂 · J5.13.3 应用内重复设置辅助选项会造成两套设置互相冲突的困惑 · J5.13.4 系统设置的变化应能被应用实时感知并即时响应而非需要重启
  • 相邻J2.02 文本缩放 · J2.15 深色与高对比模式的兼容
  • 站内检索inherit OS accessibility settings · prefers-reduced-motion · Dynamic Type

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/J5.13.1