← 字体里的隐藏开关 / variant 番外:east-asian / alternates / stretch 待审核 14 / 18
加餐 · variant 番外

variant 番外:east-asian / alternates / stretch

font-variant-numericfont-variant-caps 只是 font-variant-* 家族的两员——本页集中演示其余三个较少使用的成员:font-variant-east-asian不同年代 / 正简体的汉字字形间切换;font-variant-alternates@font-feature-valuesss01 / salt 这类匿名开关起语义名;最后介绍 font-stretch(规范已更名 font-width)——它不是 OpenType feature 而是可变字体的 wdth 轴,拖滑块实时看宽窄。

1 · 汉字字形的年代与正简:font-variant-east-asian

同一个码位,日本工业标准 JIS 在 1978 / 1983 / 1990 / 2004 四个年代规定过不同的标准字形(笔画增减、点的有无);此外还有 traditional / simplified 的正简切换。字形都在字体文件里,font-variant-east-asian 负责挑——底层是 OpenType 的 jp78 jp83 jp90 jp04 trad smpl feature。

取值 底层 tag 作用
jis78 / jis83 / jis90 / jis04 jp78 jp83 jp90 jp04 切到对应年代 JIS 标准的字形(辻 的「辶」一点 / 两点、葛 的下半之类)
traditional trad 用传统(旧体 / 正体)字形
simplified smpl 用简化字形
ruby ruby 用为注音(ルビ)小字号优化的字形
full-width / proportional-width fwid pwid 全宽 / 比例宽度的字形切换(多用于假名、标点)

这些值与 numeric 一样可组合(宽度 + 字形各取一个)。本页 demo 只拨年代 / 正简一组。

效果完全依赖字体内的 OpenType feature:CSS 这头浏览器普遍支持(上方 readout 有 CSS.supports() 实测),但字形那头得字体真做了 jp78smpl 替换表才有变化。Hiragino Mincho ProN 是 macOS 自带的日文明朝体、各代字形齐全;Windows / Linux 上若没有同等字体,这组按钮按下去字不会动——属正常退化,不是属性没生效。

2 · 给 feature 起名字:font-variant-alternates + @font-feature-values

OpenType 原始开关一页直接拨 font-feature-settings: "ss01" 1 这类匿名索引——但「ss01」对读代码的人毫无含义,且换一款字体索引就错位。@font-feature-values 解决的就是这个:按 font-family 作用域ssXX / salt 等 feature 的索引起语义名,再用 font-variant-alternates: styleset(名字) 引用。字体换了,只改一处声明,用法不变。

关于 salt(stylistic alternates):它和 ssXX 同类,是字体设计师放「另一套替换字形」的地方,在 @font-feature-values 里对应 @stylistic 块、用 font-variant-alternates: stylistic(名字) 引用。但 Inter(以及多数系统字体)没做 salt 表——所以上面的对照开关按下去字形不动,这正好演示了「拨开关 ≠ 有字形」:demo 退化为 font-feature-settings: "salt" 1 的原样对照。想看 salt 真生效,需要换 Source Sans 3 这类带 salt 的字体。

3 · 宽窄轴:font-stretch(font-width)

font-stretch 挑的不是 OpenType feature,而是字体的宽度变体:静态字体时代是在 Condensed / Expanded 几个独立字重文件间挑;可变字体时代它直接映射到 wdth 轴,百分比连续可调。下面用 Google Fonts 的可变字体 Archivo(wdth 62–125)演示——规范已把它更名为 font-widthfont-stretch 作为兼容别名保留。

附带一提:text-size-adjust。iOS Safari 会把横屏 / 宽视口下的小字自动放大(text inflation),网页可用 text-size-adjust: 100%(常带 -webkit- 前缀)关闭这套放大或指定比例。它是移动端真机话题——desktop 浏览器(包括 responsive 模式)完全看不出效果,所以本系列不为它做 demo;知道 reset 里那行 -webkit-text-size-adjust: 100% 的用途即可。

4 · 相关链接

  • font-variant-east-asian · MDN · developer.mozilla.org——jis78/jis83/jis90/jis04 / traditional / simplified / ruby / full-width / proportional-width 各取值与等价 OpenType tag。
  • font-variant-alternates · MDN · developer.mozilla.org——stylistic() / styleset() / character-variant() / swash() / historical-forms 等函数值,全部(除 historical-forms)依赖 @font-feature-values 起的名字。
  • @font-feature-values · MDN · developer.mozilla.org——按 font-family 作用域给 feature 索引起语义名:@styleset / @stylistic / @swash / @character-variant 各块的写法。
  • font-stretch (font-width) · MDN · developer.mozilla.org——关键字(ultra-condensed…ultra-expanded)与百分比取值、到可变字体 wdth 轴的映射,以及更名为 font-width 的现状。
  • text-size-adjust · MDN · developer.mozilla.org——移动端浏览器的文字自动放大算法与 auto / none / 百分比取值——只能在 iOS Safari 真机上观察。