mcpField
V
variant

variant

github.com/jakubkrehel设计与 UI9.0k15.4k 次安装3 天前更新
代码仓库

关于 variant

variant 是用于 UI 设计探索的技能,会围绕一个组件的一条设计轴生成三个候选方案,并放入真实页面的选择器中比较。它强调方案之间存在实质差异且都满足无障碍底线,适合需要评估设计取舍的开发者。

主要功能

  1. 01围绕单一设计轴生成变体
  2. 02默认创建三个候选方案
  3. 03在真实页面中切换预览
  4. 04确保候选符合无障碍要求
  5. 05展示方案取舍而不排名

适用场景

  1. 01比较同一组件的不同排版方向
  2. 02评估界面密度或视觉强调方案
  3. 03在真实页面环境中审阅设计候选

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/jakubkrehel/skills --skill variant

安装后在 Claude Code 中输入/variant确认已加载。

附带文件agents/openai.yamlpicker.md

详细介绍

变体

此技能会针对一段描述的 UI 构建三个有意设计得各不相同的版本。它们会置于实际页面的选择器后面,你可以在它们之间切换并作出选择。

它只生成候选方案,不进行排名。审查现有 UI 请用 interface-review 和 better-interface,压力测试单个组件请用 break,梳理组件的各个状态请用 state-machine。

不同的答案,而非不同的色调

每个变体都是对同一需求的不同回答,变化的维度属于本工具集负责的范围:

维度负责人变化内容
结构better-layout分组、顺序、列数、哪些内容折叠
密度better-layout间距尺度、能容纳多少内容
强调better-colors哪些位置使用填充色、哪些内容弱化显示
字体better-typography字号阶梯、字重对比、行宽
风格better-writing标签、语气、文案篇幅

选择一个主要维度,并让每个变体在该维度上各有不同取向。该维度名称就是选择器的分组标题。次要选择应由主要维度自然引出,而非自行变化。密集型变体可能需要较小的字号,这属于整体协调,而不是第二个维度。

每个变体都必须达到的底线

变体进入选择器前,必须通过 better-interface 的升级触发条件:

  • 每个控件都有无障碍名称和可见的焦点指示器。
  • 键盘可以访问指针能够访问的所有内容。
  • 动效和自动播放的内容遵循 prefers-reduced-motion。
  • 在 320px 宽度或 200% 缩放下,不会发生裁切、重叠或无法访问的情况。
  • 正文和控件文本达到要求的对比度。
  • 状态或含义不能只靠颜色表达,状态变化也不能只靠动效表达。
  • 破坏性操作必须有确认、撤销功能或明确的区别处理。
  • 被截断的内容必须提供查看完整内容的方式。
  • 不得有内容隐藏在滚动边缘之后,或藏在没有可见提示的展开项中。
  • 每条错误信息都必须说明如何恢复。
  • 语义颜色不得用于与其含义相悖的场景,例如在非破坏性操作上使用危险色调。

所有变体都必须达到同一条底线。它不是一个可供权衡的维度。若某个设计方向只有违反底线才能实现,就应说明原因并舍弃该方向。

1. 界定单个对象

每次只处理一个 UI 对象。“仪表板”不是一个对象,指标卡才是。如果请求涉及多个对象,请列出候选项并询问要探索哪一个。

用一句话重述需求:该对象是什么、会在哪里呈现、需要完成什么任务。

2. 了解设计基础

变体应当看起来像是明天就能上线,因此要先了解它们所依托的基础:

  • 样式系统、组件库和任何动效库。
  • 设计令牌:颜色、间距、圆角、字号阶梯、缓动曲线。
  • 产品的密度和风格。专业工具通常内容密集,这会限制最大胆变体的设计幅度。
  • 对象的呈现位置:背景是什么、周围有哪些相邻元素、会出现在哪些宽度下。

如果没有项目可供查阅,请使用中性灰、一种强调色和系统字体栈,并说明你采用了这些设置。

3. 编写代码前先确定维度

默认创建三个变体。只有在收到要求时才增加到五个。

先列出这组变体,为每个变体指定名称和一个维度取向。名称应体现设计方向,例如 Quiet、Editorial、Dense,不要使用 Option A。

当没有两个变体取向相同,且你能用一个短语说明每个变体的维度取向时,这一步就完成了。

4. 将它放到实际页面中

在实际承载该内容的页面上展示各个变体,并使用真实的页面框架、周边内容和逼真的数据。

使用 ?__variant=quiet 这样的 URL 搜索参数进行选择,这样每个变体都是可以发送给别人的链接。内容旁边放置一个分组列表,用来切换变体。如果内容旁边没有空间,就将列表移到上方,改为使用包含相同分组的下拉菜单。picker.md 中有具体规范。

每次只渲染一个完整尺寸的变体。缩略图会扭曲间距和比例,而间距往往正是需要比较的内容。

变体文件可以导入生产组件。只有承载页面会导入变体,其他任何文件都不得从这个测试框架导入内容。

如果没有页面可以承载它,就构建一个独立的 HTML 文件,并保留相同的选择器。

为每个变体填入真实内容:符合产品场景的文案、合理的名称,以及页面实际会承载的项目数量。占位文本和三行内容会让任何结构看起来都不错。

5. 展示取舍,然后停下

使用手边已有的浏览器打开页面一次,逐个查看每个变体。确保每个变体都能渲染、每项交互都有响应,并且控制台没有错误。如果手边没有浏览器,就说明这一点,并把 URL 交给用户检查。

然后把决定权交给用户:

变体轴上的位置适用场景代价
Quiet视觉权重最低页面每天都会使用最不容易令人印象深刻
Editorial字号最大、留白最多这个时刻值得突出呈现占用垂直空间

说明选择器运行的位置、用于切换的按键,以及评审时使用的页面宽度。375px 和 1440px 下的结论可能不同。

不要在表格中标出首选项。如果用户直接询问,就根据用户看到该内容的频率和产品的个性来回答,而不是根据你最喜欢构建哪个变体。

6. 确定一个方案,删除其余方案

用户选定方案后,按照项目自身的规范,在该方案应当归属的位置妥善实现。然后删除其他变体、选择器,以及承载页面对各个变体的导入。搜索变体名称和 __variant 参数,并检查差异,确认测试框架没有任何残留。

如果用户要求再来一轮,就保留测试框架,并再次执行 编写代码前先确定轴,围绕你倾向的方向选择新的位置。

完成之前

错误修正方法
变体之间只有强调色或文案不同将其中一个移到主要轴上的不同位置,或删掉它
所有轴同时变化只改变一个轴;其他部分随之调整
在空白路由上评审在实际承载该内容的页面上展示变体
占位文本、三行内容、“Jane Doe”使用真实文案和页面实际会承载的项目数量
最大胆的变体缺少键盘操作或焦点支持明确边界条件,或放弃该方向
在表格中标出首选项说明每个变体的代价,让用户选择
使用项目的设计令牌重新设计选择器让选择器明显处于设计系统之外
每个变体各占一个标签,排成一长行在内容旁放置可独立滚动的分组列表;列表放不下时,在内容上方使用下拉菜单
确定方案后仍留有测试框架删除它,并搜索相关名称和参数

评论

支持 Markdown