typeset 是一个专注于 UI 排版的技能,目标是把“泛用、不一致或结构混乱”的文字,转变为有意为之、精心打磨的排版。它的核心判断是:目标不是让文字更花哨,而是让它更清晰、更易读、更有意图。
用途方面,该技能适用于评估并改进界面排版,解决字体选择、字号体系、层级、字重和可读性等问题。当用户提到字体、排版或文字可读性相关话题时可以使用。
工作流程上,使用者通过 /typeset 启动该工作流。技能激活后需加载 $frontend-design,其中包含设计原则、反模式与 Context Gathering Protocol;需先遵循该协议,若尚无设计上下文,则必须先加载 $setup。
主要能力包括以下几个环节。
第一,评估当前排版。从字体选择(是否使用 Inter、Roboto、Arial、Open Sans、系统默认等隐形默认字体;字体是否匹配品牌个性;字体家族是否超过 2-3 个)、层级(标题、正文、说明文字能否一眼区分;字号是否过于接近,如 14px、15px、16px 造成层级模糊;字重对比是否足够强)、字号与体系(是否有一致的字号体系还是任意取值;正文是否达到 16px 以上最低可读性;应用 UI 用固定 rem 体系、营销/内容页标题用流体 clamp())、可读性(行宽是否在 45-75 字符理想区间;行高是否匹配字体与场景;文字与背景对比是否足够;斜体、下划线、全大写是否出于刻意而非装饰)、一致性(同类元素是否样式统一;字重使用是否一致;字距是否刻意设定;按角色的大小写是否一致)等方面分析。
第二,规划排版改进。参考 frontend-design 技能中的排版参考,了解字号体系、字体搭配、加载策略与字体选择启发式;参考文字层级与可读性资料,涉及行宽、行高、对齐、基线、标签/数值处理、语义与视觉层级、链接强调、数字对齐;在排版问题本质是层级问题时参考层级检查清单。规划内容包括字体选择、字号体系、字重策略、间距和 schema。
第三,系统性改进排版。字体选择上,选择反映品牌个性的字体,搭配有真正对比的组合(衬线+无衬线、几何+人文)或单一家族多字重,优先字重范围齐全的字体,UI 正文避免窄小的展示体,确保 Web 字体加载不造成布局偏移(font-display: swap、匹配度量的回退字体)。层级上,建立清晰字号体系(5-7 个尺寸覆盖大部分需求),结合尺寸+字重+颜色+间距,字重对比要足够明显,应用 UI 用固定 rem 体系、营销/内容页用 clamp() 流体标题并保持正文固定。可读性上,用 ch 单位设置最大宽度(如 max-width: 65ch),段落保持 45-75 字符;标题行高 1.1-1.2、正文 1.5-1.7;行越长行高越大、字号越大行高越小;浅色背景上深色文字需略增行高;正文至少 16px / 1rem。细节上,数据表和数字用 tabular-nums,数值列右对齐,同行混排按基线对齐,小写大写字母适当放宽字距,展示级大字默认或略收紧字距,斜体克制使用,按重要性决定链接强调,使用语义化 token 名(--text-body、--text-heading)而非数值名(--font-16),设置 font-kerning: normal。字重一致性上,为每个字重定义明确角色,不超过 3-4 个字重,角色间跳跃要大,只加载实际使用的字重。字号体系完整性上,以 rem 或 px 作为源值并优先用 rem 实现,避免嵌套 UI 中使用 em 体系,若需要大量小数字号则说明体系过于数学化。
禁止项包括:字体家族超过 2-3 个;任意取字号而不commit一个体系;正文字号低于 16px;正文使用装饰/展示字体;禁用浏览器缩放(user-scalable=no);嵌套 UI 用 em 定义字号体系;用极小字号制造层级;长文本居中;默认使用 Inter/Roboto/Open Sans;搭配相似但不相同的字体(两种几何无衬线)。
验证环节检查层级、可读性、一致性、个性、性能和可访问性(WCAG 对比度、200% 缩放)。