MODULE 14 / LESSON 02

组件变体、状态与使用约束

设计的不只是外观,还有 API 和组合规则。

54 / 60 课走向真实交付

先理解这个概念

一个按钮组件需要定义用途、尺寸、状态、图标位置和不可用条件。变体过多会制造组合爆炸。使用指南说明何时采用、何时不采用,以及内容长度、可访问性和组合限制。

组件契约描述允许的输入、状态、内容和行为,而不只是列出几种外观。若提供十个互相独立的布尔属性,调用方可能组合出不合理状态。应让有效组合容易表达,让危险或矛盾组合被限制,并说明组件不负责什么。

用程序员的语言说

设计系统里的组件文档就是 API 文档,示例和边界同样重要。

记住这三个原则

  1. 01

    区分外观变体与运行状态。

  2. 02

    用有限组合表达真实需求,避免无意义的自由参数。

  3. 03

    把键盘、标签和错误反馈纳入组件契约。

实际设计时,分三步做

  1. STEP 01

    列出组件任务与支持场景,定义尺寸、强调程度和状态等独立维度,不把业务场景名字都做成变体。

  2. STEP 02

    说明内容约束和行为:图标是否需要名称、加载时能否点击、长文字如何处理、错误由组件还是容器承载。

  3. STEP 03

    给出正常用法、边界用法和不支持的用法,设计稿与代码使用相同术语,避免同名变体含义不同。

一个容易理解的例子

BEFORE / 常见问题

按钮有 18 种独立颜色,却没有 loading 状态与键盘焦点规范。

AFTER / 可以这样改

收敛为主要、次要、文本、危险等角色,并补全交互状态与内容规则。

可维护的组件服务任务,不追求参数最多。

展开看:从场景到设计决定

上传按钮可以有 idle、uploading 和 failed 状态,但不应同时接受 loading=true 与 success=true 却没有优先级。组件展示进度,业务层负责实际上传与重试范围。只有图标时必须有可理解名称。列表内和页面头部可以用不同尺寸,但都遵循相同状态规则,避免外观复用、行为却完全分叉。

适用边界与取舍

万能组件容易把复杂度转移给调用方。多个任务差异明显时,拆分组件并共享底层能力,通常比继续增加属性更易理解。

YOUR TURN

把这个原则用一次

先做一个小判断

为 TextField 写四条使用约束。

再完成一份设计练习

为确认对话框写一份契约,包含标题、说明、动作、关闭规则和忙碌状态。

容易踩的坑

不要只制作默认态截图,真实产品更多时间处于变化与边界状态。

继续查阅

本课为原创教学解释。具体平台规则与标准可查阅官方资料。

Apple Human Interface GuidelinesMaterial Design 3