---
id: "buttons"
title: "按钮层级与状态"
category: "动作组件"
document_type: "component-specification"
spec_status: "local-current-draft"
element_ui: "2.15.6"
vue: "2.6.14"
page: "../index.html#spec-buttons"
source_data: "../component-data.json"
official_components: ["button", "button-group"]
template_components: ["el-button"]
scenario_count: 7
verification: "scenario-checklist-not-full-test-pass"
---

# 按钮层级与状态

专题 `buttons` · 动作组件 · Element UI 2.15.6

## 适用范围与组件映射

公共色板及字体基线适用于整个运营后台。本库整理基础组件、组件状态和可复用的组合模式；本轮补齐表单整体验证、页面布局和导航组合；具体业务字段与跨页流程仍在业务场景中说明。专题验收清单包含接入要求，不表示当前示例已实现或已验证全部场景。

官方条目映射：`button`、`button-group`。

本页模板直接使用的 Element UI 标签：`el-button`。

## 通用基线

- 组件库：Element UI **2.15.6**；运行样例 Vue **2.6.14**。
- 系统中文字体：macOS 优先苹方，Windows 通常微软雅黑；工程顺序固定为 `"PingFang SC", "Microsoft YaHei", sans-serif`。不要求安装或加载网络字体，兼容回退不是另一套可选样式。
- 后续仅采用经验证且固定版本的兼容 Element UI 2.x；Element Plus 属于独立迁移路线。
- 正文、数据值、输入及已选值：`14px / 400 / 21px`，`#303133`。
- 表头及组件分组标题：`14px / 600 / 21px`；弹窗标题：`16px / 600 / 24px`，均使用 `#303133`。
- 辅助说明：`12px / 400 / 18px`，`#595959`；错误、链接、状态、禁用与占位按各自语义处理。
- 适用组件的默认尺寸为 `small / 32px`；不得将这一高度机械应用于表格、文本域、浮层等全部组件。
- 规范正文与场景说明使用 `14px / 400 / 24px`、`#303133`，不降成灰蓝小字。
- 筛选文本输入占位统一“请输入”；未选择下拉统一“请选择”；默认全部的下拉显示“全部”。字段标签保留业务含义；日期保留开始/结束语义。
- 次级文字操作（查看更多、编辑、详情、数据中心、更多）：`12px / 400 / 18px`，`#3377BB`；保留点击热区。
- 本规范库的深色目录、蓝色展示区属于文档排版，不是业务组件颜色或业务导航规范。

## 本页用法与分类

默认用法：主要动作使用32px主按钮；次要动作使用普通按钮；列表行和字段旁的轻量操作使用12px文字按钮。

| 区分什么 | 本页内容 | 选用或触发条件 |
| --- | --- | --- |
| 动作层级 | 主要、次要、轻量文字 | 按动作重要程度选择；单个局部操作组最多一个主动作。危险与否另按实际后果判断。 |
| 尺寸 | 40/36/32/28px | 常规采用32px；其他高度需有明确容器需求，同组不混高；12px文字操作另按其规则。 |
| 交互状态 | 默认、悬停、键盘焦点、按住、禁用、加载 | 由真实操作或条件触发，同一按钮保持原动作层级。 |
| 风险语义与流程 | 危险文字、危险确认；未保存与已保存对象 | 危险描述的是后果，不是第四种动作层级。删除和移除统一使用居中确认弹窗，正文明确对象与后果；确认按钮统一写“确认”，取消保留原内容。 |

使用边界：成功、警告、信息等组件库类型不是本后台新增的常规按钮配色；圆形、胶囊、朴素等能力不能仅因组件库支持就直接采用。

## 组件规则

- **BUTTONS-R01**：先按重要程度选择主按钮、普通按钮或文字按钮，单个局部操作组最多一个主动作。再按实际后果判断是否为危险操作：危险是风险语义，不是第四种动作层级；危险动作使用规定的危险语义色。
- **BUTTONS-R02**：默认 32px、14px / 400，图标文字间距 6px，按钮间距 10px。按钮内容改变时不跳宽。
- **BUTTONS-R03**：加载态禁用并显示进行中；完成或失败退出 加载中。实际按钮保留交互；此处色样仅对照状态，不另设执行计数演示。
- **BUTTONS-R04**：【公共用色】颜色仅从公共色值 引用：主色系 3 个基础色值、辅助功能色 3 个、中性色 10 个，共 16 个基础色值。角色可以多个，实际色值复用；不为每个组件、悬停 或不同字段再新增近似颜色。透明效果仅限遮罩 35% 与阴影 12%，从 外壳深色 派生。
- **BUTTONS-R05**：【统一字体】统一系统中文字体：macOS 优先苹方（PingFang SC），Windows 通常使用微软雅黑（Microsoft YaHei）；工程顺序固定为 "PingFang SC", "Microsoft YaHei", sans-serif。使用设备已有字体，不要求安装或加载网络字体；最后一项仅作兼容回退，不是供页面作者任选的另一套样式。正文 14px/400/21px；表头与分组标题 14px/600/21px，弹窗标题 16px/600/24px；次级文字操作和辅助说明 12px/400/18px。正文与标题同用 #303133；不通过额外加粗或透明度改变正文轻重。
- **BUTTONS-R06**：【默认】主按钮 主题蓝底、白字；普通按钮 白底、正文深灰、边框灰；普通文本操作采用操作蓝、12px/400；危险文字操作采用错误红。
- **BUTTONS-R07**：【悬停 / 按下】主按钮悬停用操作蓝/白字；按住用主题蓝/白字并下移1px；普通按钮悬停 选中浅蓝底、操作蓝文字、主题蓝边框；普通文本操作保持操作蓝，危险文字操作保持错误红，悬停均加下划线。
- **BUTTONS-R08**：【聚焦】键盘 操作蓝 2px 外轮廓；不可仅依靠 悬停。
- **BUTTONS-R09**：【禁用 / 加载】禁用 浅灰底、禁用灰文字、边框灰，禁止提交；加载保留原层级及文字，增加转圈并防重复提交。
- **BUTTONS-R10**：【危险动作】危险操作分两种：行内或字段右侧使用无框无底红字“删除 / 移除”；独立确认操作可使用带框危险按钮。二者共用错误红，不得用黑字红框替代所有危险文字入口。
- **BUTTONS-R11**：【组件边界】仅使用实际存在的组件状态；没有操作能力的内容不添加悬停、选中或禁用变色。
- **BUTTONS-R12**：【叠加优先级】状态叠加规则：禁用阻断交互；输入类控件错误边框覆盖蓝色聚焦边框；输入框不叠加外圈或阴影，其他无边框操作保留键盘焦点提示；选中底覆盖悬停底；只读不等于禁用；加载不等于成功；业务启用/停用的文字结果不等于控件是否可点击。
- **BUTTONS-R13**：危险文字操作单独规定样式与交互：用于表单右侧删除、移除待上传附件、列表行删除等。默认红字 #F56C6C、12px/400，无底色、无边框、无水平内边距；点击区域至少24px高。悬停和按下保持同一红色并加下划线，键盘进入时显示红色焦点提示。禁用用 #C0C4CC 且不可执行；处理中显示原位进度并阻止重复点击。
- **BUTTONS-R14**：删除、移除统一先打开居中确认弹窗，明确对象、数量和后果；确认按钮统一写“确认”，取消不改变数据。未保存项、待上传附件、已保存记录和批量删除都沿用这一入口规则；失败保留原内容和重试入口。普通清空输入、取消筛选或关闭弹层不是删除，不自动标红。
- **BUTTONS-R15**：主题蓝、操作蓝、选中浅蓝都属于同一个主色系，分别服务于主要控件、链接/悬停和选中背景；它们不是成功绿、警告橙、错误红这组辅助功能色。交互状态不等于颜色分类，按钮按下也不等于持续选中。
- **BUTTONS-R16**：主按钮状态固定为：默认主题蓝 #409EFF；悬停操作蓝 #3377BB；鼠标按住时恢复主题蓝 #409EFF，并下移1px；松开后若仍悬停则回到操作蓝，移出回到默认。仅键盘定位时保留当前填充并显示操作蓝2px外圈，普通鼠标点击不显示外圈；加载保持主题蓝并防重复，禁用用浅灰底和禁用灰文字。
- **BUTTONS-R17**：官方支持圆形、全圆角、按钮组与多种语义类型。本项目默认4px矩形；圆形仅用于有明确名称的独立图标入口，参见图标规范；按钮组仅组织强相关操作。全圆角与额外语义色不是默认可选皮肤。
- **BUTTONS-R18**：表单与弹窗的主要操作区统一右侧对齐，次要动作在左、主动作在右，按钮间距10px。常规文案使用“确认、取消、保存、删除、重置”等两字动作；取消不保存并退出，重置恢复初始值，两者不能互相替换。涉及特殊业务时以准确表达为先。

## 场景与验收清单

以下为需核对的场景组；`[ ]` 不代表已经测试通过。

- [ ] **BUTTONS-S01**：按动作层级选择主按钮、普通按钮或文字按钮；危险文字操作使用无框红字。成功/警告/信息属于反馈语义，不作为常规按钮任意换色的依据。
- [ ] **BUTTONS-S02**：常规默认32px；仅有明确容器需求时采用40px、36px或28px，同组不混高。图标按动作需要配置；朴素、圆形、胶囊等库能力未作为本页默认采用项，新增使用需另列统一规则。
- [ ] **BUTTONS-S03**：按实际能力核对按钮组、禁用、加载中、键盘聚焦、按住、防重复提交与失败恢复。
- [ ] **BUTTONS-S04**：本页检查主按钮的默认、悬停、按住、键盘焦点、禁用和加载状态，以及危险文字操作的对应反馈。按住不是持续选中，按钮本身不套输入错误边框或半选规则。
- [ ] **BUTTONS-S05**：核对正文14/400、次级操作12/400、标题600及同色深正文；检查实际弹出层和子 span，不能只检查父元素。
- [ ] **BUTTONS-S06**：核对红色文字删除：无框无底、12px/400、悬停、键盘、禁用、处理中；子文字不能被普通蓝链接样式覆盖。
- [ ] **BUTTONS-S07**：本页分别核对未保存字段、待上传附件和已保存演示记录的居中确认、取消保留及确认结果。草稿/附件演示提供撤销；已保存记录演示提供失败重试，删除后的“重置示例”不等于业务撤销。

### 专题验收重点

在上方实际按钮检查默认主题蓝→悬停操作蓝→按住主题蓝并下移1px→松开或移出恢复；鼠标点击不出现外圈，Tab 定位保留键盘焦点外圈。下方状态色样用于对照，不是可执行按钮；危险文字示例另验删除、取消、撤销与失败重试。

## 当前示例模板

以下来自本专题的结构化示例，使用 Vue 2 模板语法。`v-model`、事件方法、数据列表等依赖 [components.js](../components.js)；完整样式文件及加载顺序见 [通用基线](FOUNDATIONS.md)。自定义组合标签的内部实现由下方依赖文件提供，不能仅复制标签作为完整组件。

```html
<div class="token-strip">
<span>常规高度 <b>32 px</b>
</span>
<span>字号 / 字重 <b>14 / 400</b>
</span>
<span>圆角 <b>4 px</b>
</span>
<span>组件间距 <b>10 px</b>
</span>
</div>
<section class="specimen-block" id="buttons-section-1">
<div class="specimen-heading">
<h4>
<span class="section-number">01</span>动作层级与风险</h4>
<span>主/次/文字是层级；危险是风险语义</span>
</div>
<div class="specimen-stage">
<div class="specimen-row">
<div class="state-cell">
<el-button type="primary" @click="notify('主要动作示例')">主要按钮</el-button>
<span>主要操作</span>
</div>
<div class="state-cell">
<el-button @click="notify('次要动作示例')">次要按钮</el-button>
<span>次要操作 · 默认</span>
</div>
<div class="state-cell">
<el-button type="text" @click="notify('文字动作示例')">文字按钮</el-button>
<span>轻量操作 · 文字操作</span>
</div>
<div class="state-cell">
<el-button type="text" class="ui-danger-text" @click="confirmLocal">移除项目</el-button>
<span>危险文字操作 · 无框红字</span>
</div>
</div>
</div>
</section>
<section class="specimen-block" id="buttons-section-2">
<div class="specimen-heading">
<h4>
<span class="section-number">02</span>交互状态</h4>
<span>明确颜色归属，也明确何时变化</span>
</div>
<div class="specimen-stage">
<p class="help">主题蓝、操作蓝、选中浅蓝都属于同一个主色系，分别服务于主要控件、链接/悬停和选中背景；它们不是成功绿、警告橙、错误红这组辅助功能色。交互状态不等于颜色分类，按钮按下也不等于持续选中。</p>
<button-state-pattern>
</button-state-pattern>
</div>
</section>
<section class="specimen-block" id="buttons-section-3">
<div class="specimen-heading">
<h4>
<span class="section-number">03</span>尺寸与节奏</h4>
<span>中控常规操作默认 32px 常规规格</span>
</div>
<div class="specimen-stage">
<div class="specimen-row sizes">
<div class="state-cell">
<el-button size="default">标准尺寸</el-button>
<span>40 px · 标准</span>
</div>
<div class="state-cell">
<el-button size="medium">中等尺寸</el-button>
<span>36 px · 中等</span>
</div>
<div class="state-cell">
<el-button size="small" type="primary">常规尺寸</el-button>
<span>32 px · 常规</span>
</div>
<div class="state-cell">
<el-button size="mini">紧凑尺寸</el-button>
<span>28 px · 紧凑</span>
</div>
</div>
</div>
</section>
<section class="specimen-block" id="buttons-danger-text">
<div class="specimen-heading">
<h4>
<span class="section-number">04</span>危险文字操作</h4>
<span>字段右侧与列表行内 · 红字、无框、无底色</span>
</div>
<div class="specimen-stage">
<div class="danger-state-grid">
<div>
<button type="button" class="ui-danger-text" @click="confirmLocal">删除</button>
<small>默认 · 红色文字</small>
</div>
<div>
<button type="button" class="ui-danger-text preview-hover" @click="confirmLocal">移除</button>
<small>悬停示意 · 加下划线</small>
</div>
<div>
<button type="button" class="ui-danger-text" disabled>删除</button>
<small>禁用 · 灰色且不可点击</small>
</div>
<div>
<button type="button" class="ui-danger-text" disabled aria-busy="true">
<i class="el-icon-loading" aria-hidden="true">
</i>删除中…</button>
<small>处理中示意 · 防重复</small>
</div>
</div>
<p class="help">普通点击不增加外框；用键盘进入时保留焦点提示。下面的场景可以实际删除、撤销、取消和模拟失败。</p>
<div class="danger-scenarios">
<section class="danger-scenario">
<h5>表单右侧：删除未保存的字段</h5>
<danger-action-demo mode="draft">
</danger-action-demo>
</section>
<section class="danger-scenario">
<h5>附件列表：移除待上传文件</h5>
<danger-action-demo mode="file">
</danger-action-demo>
</section>
<section class="danger-scenario">
<h5>列表行：删除已保存记录前确认</h5>
<danger-action-demo mode="saved">
</danger-action-demo>
</section>
</div>
</div>
</section>
```

## 交付与使用边界

- 规范条款、示例代码与待验收场景分开理解；有示例不等于已覆盖所有样式、交互状态和使用场景。
- 业务接口、权限、时区、金额精度、数据规模等依赖应从实际项目读取，不使用演示值代替生产约定。
- 发生样式或文案变更时，同步专题数据、页面与 Markdown，避免规范和样例分离。

## 来源与关联

- 来源线索：历史样板规范 3 / 39 / 41 / 42 / 53。
- [打开本专题页面](../index.html#spec-buttons)
- [通用基线](FOUNDATIONS.md)
- [规范总索引](README.md)
- [结构化规范数据](../component-data.json)（记录 id：`buttons`）
- [原始历史样板](../original-20260621.html)
- [历史规范条目](../spec-notes.json)

自定义示例 `button-state-pattern` 的实现：[button-states.js](../button-states.js)。

自定义示例 `danger-action-demo` 的实现：[danger-actions.js](../danger-actions.js)。

按钮状态色样为静态对照；键盘聚焦可在本页上方实际按钮体验。样式见 [公共按钮状态](../button-contract.css)。

危险操作样式见 [action-contract.css](../action-contract.css)；示例使用本地演示数据。

## 本组件颜色状态表

| 状态 / 条件 | 统一规则 |
| --- | --- |
| 默认 | 主按钮 主题蓝底、白字；普通按钮 白底、正文深灰、边框灰；普通文本操作采用操作蓝、12px/400；危险文字操作采用错误红。 |
| 悬停 / 按下 | 主按钮悬停用操作蓝/白字；按住用主题蓝/白字并下移1px；普通按钮悬停 选中浅蓝底、操作蓝文字、主题蓝边框；普通文本操作保持操作蓝，危险文字操作保持错误红，悬停均加下划线。 |
| 聚焦 | 键盘 操作蓝 2px 外轮廓；不可仅依靠 悬停。 |
| 禁用 / 加载 | 禁用 浅灰底、禁用灰文字、边框灰，禁止提交；加载保留原层级及文字，增加转圈并防重复提交。 |
| 危险动作 | 危险操作分两种：行内或字段右侧使用无框无底红字“删除 / 移除”；独立确认操作可使用带框危险按钮。二者共用错误红，不得用黑字红框替代所有危险文字入口。 |
| 危险文字操作 | 查看、编辑、查看更多使用操作蓝；删除、移除使用危险红。字号同为12px/400，颜色表达动作类型，不通过加粗或更大字号表达危险。 |
| 主按钮状态顺序 | 主按钮状态固定为：默认主题蓝 #409EFF；悬停操作蓝 #3377BB；鼠标按住时恢复主题蓝 #409EFF，并下移1px；松开后若仍悬停则回到操作蓝，移出回到默认。仅键盘定位时保留当前填充并显示操作蓝2px外圈，普通鼠标点击不显示外圈；加载保持主题蓝并防重复，禁用用浅灰底和禁用灰文字。 |

仅使用实际存在的组件状态；没有操作能力的内容不添加悬停、选中或禁用变色。

[公共颜色与字体 token](../color-tokens.json) · [公共组件样式](../color-contract.css) · [系统字体合同（最后加载）](../font-contract.css)

## 业务落地场景

- [会员列表 · 查询等主要操作和会员行文字操作](../../showcase/index.html#members) · [场景文档](../../showcase/docs/members.md)

[竞品组件拆解](../../reference-review/竞品组件反推规范.html) · [业务场景分类](../../业务场景分类清单.md)
