单选框适合在一组互斥答案中选一个,复选框适合选择可同时成立的多个选项,开关适合开启或关闭一项通常立即生效的设置。选择控件时,要同时回答“允许选几个”和“什么时候生效”:同样是开与关,如果必须和其他信息一起提交,复选框配保存按钮往往比开关更容易解释。
本文以活动通知设置为例,把发送时机、接收渠道和桌面提醒放到同一页。可以先在墨刀设计中排出这三个区域,检查选择规则和保存范围,再完善默认、已选、禁用与保存中的状态。

先问两件事:选项能否共存,修改何时生效
| 要表达的规则 | 优先考虑 | 活动通知例子 | 需要补充的说明 |
|---|---|---|---|
| 一组答案只能选一个 | 单选框 | 立即发送、每天汇总、不发送 | 用户可以比较完整选项,切换会取消前一个选择 |
| 多个答案可以同时成立 | 复选框 | 站内信、邮件、短信 | 是否至少选一个,是否存在上限 |
| 独立的二元设置,修改即应用 | 开关 | 桌面提醒开启或关闭 | 说明立即生效,等待和失败如何反馈 |
| 二元选择,但要统一提交 | 单个复选框或明确的单选组 | 是否在本次活动中附带位置说明 | 与本表单其他字段一起保存 |
GOV.UK单选框指南与复选框指南分别以只能选一个和可选多个区分用途。图形只是提示,必要时仍应写“请选择一项”或“可多选”,不能假设每位用户都能从圆形和方形判断规则。
Carbon的开关指南把开关用于立即应用、可逆的二元设置。如果启用之后还要填写一份复杂表单,或者动作具有不可恢复的后果,就不适合用一个轻巧开关直接结束整个过程。
选项太多时,可以考虑选择器或可搜索列表,但先保留同样的单选、多选规则。把十几个圆圈藏进下拉框,只改变展示空间,并没有解决分类、命名和是否互斥的问题。
通知设置页要把两个生效范围分开
本例约定,活动的“发送时机”和“接收渠道”是一组通知规则,需要一起保存;页面下面另有一个个人“桌面提醒”设置,更改后立即保存。它们放在同一页是为了使用方便,却不能共享含混的提交行为。
第一块标题为“通知规则”,发送时机默认展示已经保存的“每天汇总”,接收渠道展示已经保存的“站内信、邮件”。用户调整后,点击“保存通知规则”才生效。第二块与它保持明显分隔,标题为“桌面提醒”,开关旁写“更改立即生效”。保存按钮位于第一块内部,避免用户以为它也控制下面的开关。
这不是鼓励所有设置页混用两种保存方式。若用户经常误解,统一采用显式保存通常更清楚。本例保留两种方式,是因为活动通知属于团队规则,而桌面提醒属于个人偏好;若产品没有这个区别,就不必刻意拆开。

单选框要让互斥关系成立,而不是只画圆圈
“立即发送、每天汇总、不发送”描述同一种规则的三种状态,一次只选一项。“接收站内信、接收邮件”则能同时成立,不能因为视觉上想用两个圆形控件,就强迫用户二选一。
写选项时还要排除含义重叠。例如“每天发送”和“工作日发送”如果都没有说明时机,用户可能认为工作日也属于每天。可以改成“每个自然日汇总”和“仅工作日汇总”,再用说明解释实际发送时间。相同含义的“关闭”“不发送”“暂停”也不要无区别地放进同一个单选组。
单选通常无法通过再次点击已选项恢复成“什么都没选”。如果业务允许暂不选择,就提供明确的“不设置”或“暂不决定”;如果用户可能不知道答案,且这确实是有效回答,就提供“不确定”。不要为了让表单看起来完整,替用户预选一项未知答案。
不过,编辑已有设置时应回显已保存的值。这里的“每天汇总”来自既有通知规则,和首次填写问卷时擅自替用户选择不同。新建规则需要默认值时,把它视为产品决定,确认其合理性,并让用户能够发现和修改。
本例选择“不发送”后,接收渠道不再参与本次通知规则的执行。可以保留用户刚才选的渠道,方便切回发送模式,但应显示它们暂不生效。选项引出更多字段时,相关的保存与隐藏值问题可接着看条件表单的字段显隐规则。
复选框的空选、全选和半选,要分别约定
复选框允许多个选择,并不自动意味着零个也有效。在本例里,只要发送时机不是“不发送”,就至少需要一个接收渠道。若用户取消了全部渠道,点击保存时应指出“请至少选择一个接收渠道”,而不是悄悄替他勾上邮件。
有些产品会提供“以上都不选”作为复选项。它与其他选择不能同时成立:选中它应清除其他项,再选任一渠道应取消它。但本例已有“不发送”的单选项,再加“任何渠道都不接收”会产生两套关闭方式,因此无需增加。
渠道很多、用户需要批量勾选时,再增加“全部渠道”。它应反映子项实际结果,而不是一个与子项无关的独立偏好。假设当前可选渠道为站内信、邮件、短信:
| 子项状态 | 父项“全部渠道”的样式 | 本例点击父项后的结果 |
|---|---|---|
| 三个都未选 | 未选 | 选中三个渠道 |
| 只选站内信和邮件 | 半选,显示横杠 | 补选短信,变为全部选中 |
| 三个全部选中 | 已选,显示勾号 | 清除三个渠道 |
半选说明“这一组里有一部分被选中”,不是短信处于半开启状态。本文约定半选时点击父项会全选;若团队组件采用别的明确规则,应保持统一,不能让不同页面各自猜测。
禁用项还需要单独处理。比如短信渠道当前不可用,应在旁说明原因;“全选”是否包含不可选项、半选按哪些项计算,都要在组件说明里写清。本例按可操作渠道计算父项状态,不把不可用项算作未选缺口;已经保存但暂时不可用的渠道则保留说明,不能无声删除。
开关标签保持不变,状态和保存结果分别说明
开关旁的标签应始终是“桌面提醒”,状态另显示“开”或“关”。不要打开后把标签改成“关闭桌面提醒”,让用户分不清这行文字描述的是当前状态还是下一次动作。W3C的Switch模式明确提醒,开关标签不应随状态改变。
“更改立即生效”指用户不必再点另一个保存按钮,不代表系统保存永远没有等待。可以采用先确认成功再更新最终状态的方式,也可以先显示待完成变化;不论采用哪种方式,都要让“保存中”与“已经打开”可区分。
本例从“关”开始:用户打开桌面提醒后显示“保存中”,短暂阻止再次切换;确认成功后显示“开”。如果已经确认保存失败,就回到已确认的“关”,提示“未开启,请重试”。若只是请求超时、结果未知,则先确认当前设置,再决定回到哪一态,不能仅凭没有收到响应就断言关闭。
这条开关只表达产品里的提醒偏好。实际桌面通知还需要浏览器或系统允许;没有相应权限时,应提供原因和需要用户完成的步骤,不能让开关亮起就暗示一定会收到提醒。原型画面也不能代替真实通知权限与保存逻辑。

选择之后还没保存,要让用户看得出来
通知规则需要分清三个值:已经保存的规则、用户正在修改的选择、正在提交的那份规则。例如原来是“每天汇总+站内信/邮件”,用户改为“立即发送+邮件”,但还没点保存,此时列表中的勾选代表待保存选择,不能在别处显示“通知规则已更新”。
点击“保存通知规则”后,显示保存中,确认成功才移除未保存提示。若保存失败,保留用户的新选择,告诉他“未保存,原通知规则仍生效”,并允许重试。若用户点击“取消修改”,则恢复原先已经保存的“每天汇总+站内信/邮件”。
这与即时开关失败回到已确认状态并不矛盾:显式保存表单里有一组可继续修改的草稿;独立开关则需要清楚显示当前实际设置。设计师应根据任务决定哪部分保留为待修改内容,哪部分代表已生效事实,而不是要求所有控件失败后都机械地清空或回退。
把选择规则变成一段可预览的设置任务
先在画布建立完整通知设置,再制作修改未保存、提交中和保存失败三个画面。单选组保持相同标题与选项顺序,复选组显示“可多选”,开关区域始终保留“更改立即生效”。长标签可换行,整行点击范围与控件本身的关系要清楚;不要只让用户点中一个很小的圆或方框。
需要演示操作时,可在墨刀原型中连接以下路径:“将每天汇总改为立即发送,只保留邮件,保存失败后重试;再关闭桌面提醒。”预览结果应让用户知道两次操作各自是否保存,第一次失败不会抹去正在修改的渠道,第二次也不需要再点通知规则的保存按钮。
最后补一条只用键盘的操作路径:选择组有清楚名称,焦点可以辨认,选中状态能被读取,隐藏或禁用内容不会造成无说明的阻塞。交付时把单选范围、多选上下限、父项规则、保存时机和失败恢复标在相应区域旁。这样,研发收到的就不仅是几个漂亮控件,而是一套能一致执行的通知设置规则。