variant 番外:east-asian / alternates / stretch
font-variant-numeric 和 font-variant-caps 只是 font-variant-* 家族的两员——本页集中演示其余三个较少使用的成员:font-variant-east-asian 在不同年代 / 正简体的汉字字形间切换;font-variant-alternates
配 @font-feature-values 给 ss01 / 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() 实测),但字形那头得字体真做了 jp78…smpl 替换表才有变化。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-width,font-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 真机上观察。