按钮怎么选Button Variants
先看怎么选
用户要完成一个操作(登陆、提交表单、删除、取消等),你需要选择哪种按钮来表达这个动作的"重要程度"。
朱批看操作的重要性——主要操作用 Primary(突出显眼),次要操作用 Secondary(陪衬),破坏性操作用 Danger(警示色),非关键的替代操作用 Ghost(克制)。
Primary
页面上最重要的操作。用户完成这一步才能达成目标。颜色用品牌强调色(朱砂
- 适合
- 提交表单、登陆、发布文章、保存更改、确认购买——只要是"用户真正想做的主操作"。通常每个页面只有 1-2 个。
- 不适合
- 不要把所有按钮都做成 Primary。如果一个页面有 5 个同样红的按钮,用户看不出哪个是真正想要的。
实现细节与 Prompt
- 视觉层级
- 品牌强调色,对比度 5.28 on white(WCAG AA)
- 触达区
- 最小 44x44px(移动端标准)
- 状态
- Normal → Hover → Active → Disabled → Loading
- 可访问性
- Button 有文案,不只有 Icon;disabled 时 aria-disabled=true
Create a Primary button for [action]. Style:
- Background: Cinnabar (#C13E23)
- Text: White (#FFFFFF)
- Height: 44px (touch target)
- Border radius: 6px
- States:
- Normal: Cinnabar background
- Hover: Cinnabar-deep (#A33418)
- Active: Scale 0.98
- Disabled: Opacity 0.5, cursor not-allowed
- Loading: Show spinner + disable
- Responsive: Full width on mobile, auto width on desktop
- Font: 16px, font-weight: 500, text-align: center
Secondary
页面上比较重要但不是主操作的按钮。视觉上比 Primary 弱,但比 Ghost 更有存在感。通常用深灰边框,背景透明或浅灰。
- 适合
- 「取消」「返回」「保存草稿」「应用筛选」——操作本身有意义,但不是用户的最终目标。一个页面可以有多个 Secondary。
- 不适合
- 不要同时用 Primary 和 Secondary 做平等的选择。如果是"保存 vs 取消"这种对立操作,用 Primary(保存)+ Ghost(取消)更清楚。
实现细节与 Prompt
- 边框色
- Ink-2,对比度 4.5+ 达 AA
- 背景
- 透明(让下层内容透出)或极浅背景
- 用途
- 配合 Primary 形成操作对比
Create a Secondary button for [action]. Style:
- Border: 1px solid Ink-2 (#6B675F)
- Background: transparent or Paper (#FAF8F4)
- Text: Ink (#1C1B18)
- Height: 44px
- Border radius: 6px
- States:
- Normal: Border + transparent background
- Hover: Border darker, background lightened
- Active: Scale 0.98
- Disabled: Opacity 0.5
- Font: 16px, font-weight: 500
Ghost
最克制的按钮。只有文字,没有边框或背景。用于非关键操作、替代方案、或"用户可能不需要的"功能。
- 适合
- 「忘记密码?」「了解更多」「跳过」「后退」——这些操作存在,但不是用户的优先路径。价格列表中的「查看详情」按钮。
- 不适合
- 不要把 Primary 操作做成 Ghost——用户会错过它。Ghost 适合"锦上添花"的功能,不适合"必须完成"的操作。
实现细节与 Prompt
- 最小化
- 没有背景、边框、阴影,只有文字
- 悬停
- 下划线,不抬升
- 适用
- 辅助链接、替代操作
Create a Ghost button for [action]. Style:
- Background: transparent
- Border: none
- Text: Cinnabar (#C13E23)
- Height: 44px (padding only, no visible height)
- Text decoration: underline on hover
- States:
- Normal: Text only
- Hover: Text color + underline
- Active: Opacity 0.8
- Disabled: Opacity 0.5
- Font: 16px, font-weight: 400
- Minimal padding: 8px 0 (垂直 space only)
Danger
用于破坏性操作(删除、清空、注销)。用错误色(#A02C2C)警示用户"这个操作可能无法撤销"。
- 适合
- 删除文章、清空缓存、永久注销账号、批量删除——任何"操作后用户会失去什么"的操作。通常会配合确认弹窗。
- 不适合
- 不要过度使用 Danger。如果操作可以撤销(如删除草稿),就用 Secondary 而不是 Danger。Danger 是为了真正的"无法恢复"。
实现细节与 Prompt
- 警示色
- 错误色 #A02C2C,对比度 4.5+ 达 AA
- 行为
- 通常需要确认(Modal)
- 位置
- 通常在窗体底部,远离其他按钮
Create a Danger button for [destructive-action]. Style:
- Background: Error (#A02C2C)
- Text: White (#FFFFFF)
- Height: 44px
- Border radius: 6px
- States:
- Normal: Error background
- Hover: Darker error shade
- Active: Scale 0.98
- Disabled: Opacity 0.5
- Should always be paired with a confirmation dialog
- Font: 16px, font-weight: 500
详细说明
按钮怎么选:Primary / Secondary / Ghost / Danger
它是什么
按钮是用户“触发一个动作”的最直接方式。但不是所有操作都一样重要。一个博客可能有“发布文章”(用户真正想做的)和“返回”(返回上一页),如果两个按钮颜色一样大小一样,用户会困惑哪个是真正要点的。
按钮的变体(颜色、样式、尺寸)存在的唯一目的:帮助用户一眼看出每个操作的重要程度。
技术标注
| 考虑点 | 决策 |
|---|---|
| 对比度 | 所有按钮文字与背景 ≥ 4.5:1(WCAG AA);Deep Cinnabar (#A33418) hover 仍达标 |
| 触达区 | 移动端最小 44x44px;桌面 40x40px 可接受 |
| 焦点态 | 用户按 Tab 时必须有可见 Focus Ring(Cinnabar 边框或轮廓) |
| 禁用态 | disabled 属性 + aria-disabled="true" + 视觉淡化(opacity 0.5) |
| 加载态 | 显示 Spinner + 文案「登陆中…」+ 禁用按钮(防重复点击) |
什么时候用这个词
做设计决策时
场景 1:表单提交
表单有三个按钮:「保存」「保存草稿」「取消」
用户思考过程:
1. 我想要的是什么?→ 保存文章
2. 如果不确定呢?→ 先保存草稿
3. 改主意了?→ 取消
按钮策略:
「保存」→ Primary(用户的主目标)
「保存草稿」→ Secondary(必要但不是第一选择)
「取消」→ Ghost(用户可能根本不需要点)
视觉结果:
用户一眼看到红色「保存」,知道这是推荐操作 ✓
「保存草稿」次一级,用户可以看到它但不会误点
「取消」淡到背景里,真的想取消的人能找到它
场景 2:列表操作
商品卡片上有两个操作:「加入购物车」「收藏」
加入购物车 → Primary(这是网站想要的主转化)
收藏 → Ghost(用户可能想,但不是网站目标)
如果两个都是 Secondary,用户不知道哪个优先 ✗
场景 3:破坏性操作
删除文章的弹窗有两个按钮:「删除」「保留」
保留 → Secondary(默认安全选项)
删除 → Danger(用户选它前会二思)
绝对不要「删除」用 Primary 品牌红——那是商业色,
不是警告色,会误导用户觉得"这是网站想要的" ✗
给 agent 发指令时
你现在要为一个任务管理应用设计「任务卡片」的操作按钮。
需求:
- 卡片上有「标记完成」「编辑」「删除」三个操作
- 移动端友好(44px 高)
- 按钮必须清晰表达操作的重要性和风险
你的按钮选择应该是:
- 「标记完成」→ Primary(用户最常做的操作)
- 「编辑」→ Secondary(次要但常用)
- 「删除」→ Danger(破坏性,要警示)
生成 HTML + CSS,包括所有状态(hover/active/disabled/loading)。
常见错误
❌ 错误 1:所有按钮都是 Primary 色
形成的问题:
- 用户不道哪个是推荐操作
- 页面显得"吵"(一堆红按钮)
- 可访问性:使用屏幕阅读器的用户听不出优先级
正确做法:一个页面最多 1-2 个 Primary,其他用 Secondary/Ghost
❌ 错误 2:用 Primary 做破坏性操作
按钮:「删除」(红色)
用户理解:网站想让我删除?这个红色看起来像"推荐操作"...
结果:用户误点删除,后悔莫及
正确做法:删除用 Danger 色 #A02C2C(暗红,有警示感)
❌ 错误 3:Ghost 按钮文字太小或颜色太淡
「忘记密码?」用 Ghost 但字色 #CCCCCC(太浅)
问题:看不清楚、对比度不足(WCAG 不过)
用户根本看不到这个选项
正确做法:Ghost 文字用 Cinnabar #C13E23,和 Primary 一样色
关键是没有背景,用户才觉得"不重要"
❌ 错误 4:加载时没有禁用按钮
用户点登陆 → 网络慢 → 用户再点一次 → 重复请求 → 后端报错
正确做法:Loading 时 disabled + cursor: not-allowed
防止重复提交
相关词条
- №01「Card」 — 卡片上通常有多个按钮,需要用变体区分重要性
- №02「Tabs」 — Tab 切换有时也用类似的“当前 vs 非当前”的视觉区分逻辑
- №03「Link vs Button」 — 什么时候用 Button,什么时候用 Link
- №04「Loading Spinner」 — 按钮加载态配合 Spinner
- №05「Focus Ring」 — 键盘用户必须能通过 Focus 看出按钮在哪
完整可复制的 Prompt
设计一个任务管理应用的「任务卡片」中的操作按钮组。
需求:
1. 三个操作按钮:
- 「标记完成」(primary) — 用户最常用的操作
- 「编辑」(secondary) — 次要操作
- 「删除」(danger) — 破坏性操作,需要确认
2. 设计约束:
- 配色遵循 TellYourAgent 设计系统
* Primary:Cinnabar #C13E23(hover #A33418)
* Secondary:边框 Ink-2 #6B675F
* Danger:Error #A02C2C
- 所有文字与背景对比度 ≥ 4.5:1(WCAG AA)
- 移动端最小触达区 44x44px
- Border radius 6px
3. 所有按钮状态:
- Normal:基础样式
- Hover:颜色变化 + 不抬升(不加阴影)
- Active:缩小 0.98(按下感)
- Disabled:opacity 0.5 + cursor: not-allowed
- Loading:Spinner + 文案「操作中...」+ 禁用
4. 响应式:
- 桌面(≥768px):三个按钮并排,每个自适应宽度
- 移动(<768px):三个按钮堆叠(每行一个),full-width
5. 可访问性:
- 每个按钮都有清晰的 aria-label(对屏幕阅读器)
- Focus Ring 可见(outline 2px solid Cinnabar)
- 键盘用户可以 Tab 遍历所有按钮
输出:
- HTML 结构(语义化,用 <button> 不是 <div>)
- CSS(包括所有状态、媒体查询、focus-visible)
- JavaScript(如需 Loading 态演示)
- 使用说明(何时用哪种按钮)
实施步骤
-
定义色彩系统(在 DESIGN.md 中已有)
- Primary: #C13E23 → hover: #A33418
- Secondary: 边框 #6B675F
- Danger: #A02C2C
-
建立 CSS 类名系统
.button /* 基础样式:高度、圆角、字号 */ .button-primary /* 背景 + 文字色 */ .button-secondary /* 边框 + 透明背景 */ .button-ghost /* 只有文字 */ .button-danger /* Danger 背景 */ .button:disabled /* 禁用态 */ .button.loading /* 加载态 */ -
演示组件(在 TellYourAgent 网站上实时展示)
- 四种变体的对比
- 所有状态转换动画
- 响应式预览
- 可访问性检查反馈
-
实测 Prompt 用生成的 Prompt 给 Claude 或其他 LLM,验证它能生成高质量的按钮代码。
为什么这个决策很重要
按钮看起来很简单,但它是整个界面信息层级传达的基础。
- 用户用眼睛扫描页面,首先看到什么?大多数情况是最红、最突出的按钮
- 如果你把“删除”做成主按钮色,用户会莫名其妙地删除东西
- 如果所有按钮都一样,用户无法快速判断“这个操作安全吗”
一句话:按钮的样式不是装饰,是对用户的指引。选对了,用户体验提升;选错了,用户会误操作。