SuperAPI AI 工具集

font-features

设计与创作

查看项目

更新于 10-15 21:53

技能介绍

用途:检查字体文件真实支持的 OpenType 特性,并生成启用所选特性的 CSS。核心原则是先运行脚本列出字体实际特性,只启用清单中存在的特性,不猜测。

依赖:需要 fontTools,缺失时执行 pip install fonttools。

工作流:

  1. 检查项目中的字体文件:python3 <skill-dir>/scripts/otfeat.py list path/to/Font-Regular.woff2 [more fonts...]。输出列出每个字体的 GSUB/GPOS 标签及说明。
  2. 通过 cenno(mcp__cenno__ask_user 或 ask_sequence)向用户提问,只提供第 1 步发现的特性,分组并给出建议。常见问题包括:编码连字(箭头 ss03、冒号 ss07、比较 ss02 等,通常仅用于代码)、数字样式(表格数字 tnum 用于表格/计时器,旧式数字 onum 用于正文,带斜杠零 zero)、纹理修复(calt,Monaspace 建议全局开启)、大写(case 用于大写标签/按钮,smcp 若存在)。使用 {kind: "choice"} 并带文本选项,可选问题标记低优先级,尊重“跳过”。
  3. 确定性生成 CSS:python3 <skill-dir>/scripts/otfeat.py css --family "Monaspace Neon" --features calt,liga,tnum,case --class prose;带值的 cvXX 用 --features cv01=2。优先自动使用高层 font-variant-* 属性(级联与组合更好),其余标签回退到 font-feature-settings;--no-variant-props 强制仅用低层形式。
  4. 应用:将代码块粘贴到项目样式表,按元素角色限定范围(如 tnum 仅用于表格/数字块,连字集仅用于代码),在浏览器中用真实内容验证。

注意事项:font-feature-settings 每条声明是全有全无,嵌套元素上的第二条声明会替换继承列表,需重复完整列表,这是优先用 font-variant-* 的主因。CSS 接受任意标签,浏览器会静默忽略字体缺失的标签,故第 1 步必须执行(如 Monaspace 没有 tnum/zero/smcp,它是等宽字体且零已带斜杠)。样式集含义因字体而异,不可套用其他字体的 ss 说明。标签存在不代表覆盖假定的字形,写演示文案前应转储实际 GSUB 替换(如 Monaspace 的 case 只提升 : ¡ ¿ ‽ 和组合重音,不含引号、括号或破折号)。纹理修复需保持 calt 与连字开启,font-variant-ligatures: none 会使其失效。