用户字号设置必须被尊重
别名: 动态字体 · 系统字号 · content size category
概念解释
操作系统里有一项用户已经选过的设置:把字变大或变小。iOS 叫 Dynamic Type(内容大小类别),Android 是字体比例,桌面浏览器有默认字号和缩放。应用如果把正文写成死像素,等于把这项设置当成没发生——设计稿上的 15 在所有人眼睛里都是 15,包括那些专门把系统调到「更大」的人。尊重用户字号,意思是产品的文字尺寸跟这项设置走,而不是跟画板走。
尊重不是「也提供一个应用内的字号滑杆就行」。系统设置是跨应用的习惯;应用内再做一套,用户要调两次,而且常常调了系统、应用仍不听。
机制
用户放大字号,通常是因为默认尺寸在他的视距、视力和照明下不够用。这个判断已经在系统层做完了。应用再锁像素,等于用设计者本人的阅读条件覆盖用户的。缩放若不发生,后续的重排、容器冲突都还没机会出现——失败停在更早的一层:字根本没长。
技术上,尊重意味着文字用会跟内容大小类别走的样式(文本风格、sp、相对根字号),而不是 px / dp 钉死。平台提供的标题、正文、说明风格不但带尺寸,还带该风格在每一档类别下该变成多大。自己发明一套像素阶梯、又关掉跟随,等于同时丢掉尺寸和系统已经算好的档差。
有一种假尊重:开了跟随,又用「缩字以适配」把放大后的字塞回原来的按钮高度。表面上设置被读到了,立刻被另一条规则掐回去。用户看到的仍是原来的小字,只是更挤。尊重必须活到渲染完,不能在布局的最后一公里被吃掉。
边界
游戏 HUD、地图注记、相机取景上的叠字,有时必须钉在物理尺寸上,否则会挡住关键视场或破坏比例——这些要当作明确的例外,而不是默许全产品锁像素。品牌展示的超大数字如果已经远超阅读下限,再跟系统放大可能撑破构图;它可以不跟,但旁边的说明文字仍要跟。用户把系统字号调到小于设计默认时,产品也应缩小,而不是只在放大方向上「尊重」。完全不提供系统设置的环境(某些嵌入式屏、广告机)没有可尊重的来源,那时才退回产品自己的阶梯。
怎么落地
- 正文、标题、说明使用平台会随内容大小类别缩放的文本风格;把写死的像素字号当成需要书面理由的例外。
- 不要用「缩放到塞进原高度」去抵消放大。字长了,盒子让路,而不是字让路。
- 应用内字号选项如果存在,只作为系统设置之上的额外调节,默认仍跟随系统,不要替换它。
- 把系统字号往上拨一档,看产品里的正文是否真的变大。完全不动,就是设置被忽略;动了一下又被按钮缩回去,是假跟随。