MODULE 14 / LESSON 02
组件变体、状态与使用约束
设计的不只是外观,还有 API 和组合规则。
先理解这个概念
一个按钮组件需要定义用途、尺寸、状态、图标位置和不可用条件。变体过多会制造组合爆炸。使用指南说明何时采用、何时不采用,以及内容长度、可访问性和组合限制。
组件契约描述允许的输入、状态、内容和行为,而不只是列出几种外观。若提供十个互相独立的布尔属性,调用方可能组合出不合理状态。应让有效组合容易表达,让危险或矛盾组合被限制,并说明组件不负责什么。
设计系统里的组件文档就是 API 文档,示例和边界同样重要。
记住这三个原则
- 01
区分外观变体与运行状态。
- 02
用有限组合表达真实需求,避免无意义的自由参数。
- 03
把键盘、标签和错误反馈纳入组件契约。
实际设计时,分三步做
- STEP 01
列出组件任务与支持场景,定义尺寸、强调程度和状态等独立维度,不把业务场景名字都做成变体。
- STEP 02
说明内容约束和行为:图标是否需要名称、加载时能否点击、长文字如何处理、错误由组件还是容器承载。
- STEP 03
给出正常用法、边界用法和不支持的用法,设计稿与代码使用相同术语,避免同名变体含义不同。
一个容易理解的例子
按钮有 18 种独立颜色,却没有 loading 状态与键盘焦点规范。
收敛为主要、次要、文本、危险等角色,并补全交互状态与内容规则。
可维护的组件服务任务,不追求参数最多。
展开看:从场景到设计决定
上传按钮可以有 idle、uploading 和 failed 状态,但不应同时接受 loading=true 与 success=true 却没有优先级。组件展示进度,业务层负责实际上传与重试范围。只有图标时必须有可理解名称。列表内和页面头部可以用不同尺寸,但都遵循相同状态规则,避免外观复用、行为却完全分叉。
适用边界与取舍
万能组件容易把复杂度转移给调用方。多个任务差异明显时,拆分组件并共享底层能力,通常比继续增加属性更易理解。
把这个原则用一次
先做一个小判断
为 TextField 写四条使用约束。
再完成一份设计练习
为确认对话框写一份契约,包含标题、说明、动作、关闭规则和忙碌状态。
不要只制作默认态截图,真实产品更多时间处于变化与边界状态。
继续查阅
本课为原创教学解释。具体平台规则与标准可查阅官方资料。
Apple Human Interface GuidelinesMaterial Design 3