返回知识库

产品与设计 · 设计交付

组件变体Component Variant

同一组件按属性轴(强调 / 尺寸 / 状态)派生出封闭、可枚举的版本;属性驱动,而不是复制粘贴。

变体实验台:按属性轴派生,非法组合被挡下

切换强调 / 尺寸 / 状态三根轴,看按钮物件如何按约束派生、属性标签如何枚举;验收后合法戳盖在物件上;试着加第 4 种强调,看它怎么被挡下。

场景:给订单卡的「去结算」按钮配一个合法变体。切换三根属性轴,看按钮物件如何按约束派生、属性标签如何实时枚举;再试着加一种“蓝一点”的第 4 强调,看它被挡下。

强调 primary · secondary · danger尺寸 sm · md状态 default · hover · disabled · loading
订单卡 · 去结算

emphasis=primary · size=md · state=default

强调
尺寸
状态

待验收当前 emphasis=primary · size=md · state=default。配置好三轴后点「验收变体」盖合法戳(可验收),或点「试着加第 4 种强调」看它怎么被挡下。

面板里测到的结论怎么用

刚才物件随属性轴整体变化、第 4 种强调被挡下,对应的就是属性驱动、封闭集合和状态独立成轴这三件事。

  • 变体 = 同一组件按属性轴派生版本;组件代码一份,渲染由属性决定,不靠复制。
  • 每根轴有封闭值域(强调 3 / 尺寸 2 / 状态 4),组合可枚举、可预测、可评审。
  • 状态是独立轴:disabled / loading 改的是可操作性和反馈,不是换一种颜色或新强调。
  • 颜色微调不等于新变体:没有新语义轴的“蓝一点”要回到 token 或现有强调,不纳入集合。
  • 变体表同时记录用途、使用场景和 hover / focus / disabled / loading 状态行为。

什么时候专门封变体集

同一个组件在多处出现、且语义 / 尺寸 / 状态有稳定差异时封;只有一两处出现的组件先不必。

适合

按钮、输入、卡片、标签、提示在多页复用;出现“第三种蓝一点的按钮”、复制组件改色、或同一组件的状态行为前后不一致时,应收口为封闭变体集。

不必当万能解

变体管的是“同一组件按轴派生”,不管信息层级、布局或亲密性;只出现一次的组件先做对,不必预先封全集。

从需求到封闭变体集:最短路径

不要从“再做一个颜色”开始。先列轴、定封闭值域,再用属性驱动渲染,最后补状态表。

  1. 列轴:列出该组件真正需要变化的语义维度(如强调、尺寸、状态、主题),命名每根轴。
  2. 定封闭值域:给每根轴定有限的取值(如强调 primary · secondary · danger),写出每个值的使用场景。
  3. 属性驱动:组件代码一份,由 props 在轴上派生;禁止复制组件改色当新变体。
  4. 补状态表:为每个组合写清 hover / focus / disabled / loading 的外观与行为,并实测触控尺寸与文案长度。
  5. 评审只认轴内组合:新需求先问“能否映射到现有轴”,不能再扩轴并记录理由。

同一颗去结算按钮:正例与反例

目标都是给「去结算」一个合适的样子。差异只在按属性轴派生,还是复制改色。

正例属性派生

「去结算」配成 emphasis=primary / size=md / state=default,三轴都落在封闭集合内;按钮由属性驱动渲染,代码一份,状态表复用。

差异:组合可枚举、可验收,下次同名需求直接复用。
反例复制改色

为了“再柔和一点”复制主按钮、把背景改成浅蓝,当作第四种强调。它没有新的语义轴,团队不知道何时该用它,维护时也无人敢删。

差异:只改一处——绕开属性轴去复制,变体集就不再封闭可枚举。

快速自测

设计稿说“主按钮再做一个比现在浅一点的蓝色版本”。该怎么处理?

继续查证

术语的技术定义和行为以这些一手或权威资料为准。

下一步学

和本知识点经常一起出现的概念。