Files
ONE-OS/web端/需求说明/Antd设计规范(v5).md

201 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Ant DesignAntD设计规范导出v5
> 说明:本文档基于 Ant Design v5 官方文档与设计令牌Design Token整理用于项目内统一 UI 口径。若与线上文档不一致,以官方文档与实际 `token` 输出为准。
>
> 参考:
> - Ant Design 文档:`https://ant.design/docs/react/introduce`
> - 主题定制Design Token`https://ant.design/docs/react/customize-theme`
> - CSS Variables`https://ant.design/docs/react/css-variables`
## 1. 设计原则(适用于业务后台)
- **清晰**:信息层级明确(标题/正文/辅助信息/弱提示),减少不必要装饰。
- **一致**:同类型组件在同场景下外观与交互一致(按钮语义、表单校验、弹窗页脚等)。
- **高效**:高频任务优先(表格筛选、快捷操作、批量处理),减少路径长度。
- **可控**:可预期的反馈(加载/成功/失败/空态),避免“无响应”与不可逆操作。
## 2. 视觉基础Design Token 口径)
### 2.1 色彩Color
#### 语义色(常用)
- **主色Primary**:品牌/主要操作按钮/高亮状态
- AntD v5 默认:`colorPrimary = #1677ff`
- **成功Success**:成功态、完成态、正向结果
- **警告Warning**:需要注意但不阻断流程
- **错误Error**:失败、阻断、危险操作
- **信息Info**:中性提示(一般与 Primary 同系或更弱)
#### 文本与背景(建议层级)
- **正文主文本**:用于标题、正文关键值
- **次级文本**:用于说明、辅助信息
- **弱文本**:用于占位、不可用、次要信息
- **容器背景**:页面背景、卡片/表格容器背景
- **分割/边框**:分割线、边框、表格网格线
> 落地建议:**不要直接手写颜色值**,优先使用 AntD token如 `colorText` / `colorBgContainer` / `colorBorder` / `colorPrimary`),避免暗色模式或主题切换时失控。
### 2.2 字体Typography
- **基础字号**AntD v5 默认 `fontSize = 14px`
- **字号体系**:在正文 14 的基础上,常用 `12/14/16/20/24`(具体以 token 为准)
- **字重**:正文 400标题/强调 500/600按设计与字体实际支持
- **行高**:正文建议 1.41.6 区间;表格/表单密集场景可略收紧但要保证可读性
落地建议:
- 表单 label、辅助说明、错误提示使用 **次级/弱** 文本层级,避免与正文抢占注意力。
- 数字与金额在表格中建议 **右对齐**,并用等宽数字特性(如字体支持 `font-variant-numeric: tabular-nums`)提升可扫读性。
### 2.3 间距Spacing
推荐用 8px 网格作为基础节奏token 会覆盖实际值):
- **4/8/12/16/24/32**:常用间距档位
- 表单项上下间距、卡片内边距、区块间距尽量统一
落地建议:
- 页面区块24区块间
- 卡片/容器内边距16 或 24
- 表单项间距16常规/ 12密集
### 2.4 圆角Radius
- AntD v5 默认 `borderRadius = 6px`
常见分层:`2/4/6/8`(不同组件会使用不同层级)
落地建议:
- 不要在同一页面混用多个“视觉上相近但不一致”的圆角(例如 4 与 6 随意混用)。
### 2.5 阴影与层级Shadow & Elevation
典型层级:
- **容器浮层**Popover/Dropdown/Tooltip
- **对话框**Modal
- **抽屉**Drawer靠近边缘
落地建议:
- 阴影仅用于表达“悬浮/层级”,不要把阴影当分割线使用。
### 2.6 动效Motion
- **有意义**:动效用于表达状态变化(展开/收起/加载/反馈),避免纯装饰。
- **短而稳**:后台系统建议偏短时长,降低等待感;重要确认可以稍长但不要拖沓。
- **可中断**:用户快速操作时动效不应叠加导致卡顿或错位。
## 3. 布局与栅格Layout & Grid
- 使用 `Row/Col``Space/Flex` 组织布局,避免大量手写 margin 拼接。
- 表单与筛选区建议固定结构:
- **筛选区**(可折叠)
- **操作区**(主按钮 + 次按钮 + 批量操作)
- **表格区**
- **分页/汇总**
- 页面建议采用“标题 + 关键指标/说明 + 主体内容”层级,减少首屏信息噪声。
## 4. 组件使用规范(后台高频)
### 4.1 Button按钮
- **主按钮Primary**:每个视图/弹窗**尽量只有一个**主按钮(最主要动作)。
- **次按钮Default**:辅助动作、返回、取消。
- **危险Danger**:删除/作废/清空等不可逆操作必须配确认Popconfirm/Modal.confirm
- **禁用态**:禁用必须有原因(提示或辅助文案),避免“为什么点不了”。
弹窗页脚建议顺序(从右到左):**主操作** → 次操作(取消/关闭)。
### 4.2 Form表单
- 校验提示就近展示,错误文案可读且可执行(告诉用户怎么改)。
- 必填项统一标识;不要同页混用不同必填标记策略。
- 长表单建议分组Card/Collapse/Steps并提供保存草稿/分步提交(视业务复杂度)。
### 4.3 Table表格
- 列宽:关键列固定宽度,描述列可自适应;避免全自适应导致抖动。
- 对齐:金额/数量 **右对齐**;状态/标签可居中;文本默认左对齐。
- 操作列:避免超过 3 个直出操作;其余收纳到 Dropdown/More。
- 空态:提供原因与下一步(调整筛选/新建/刷新)。
### 4.4 Modal / Drawer弹窗/抽屉)
- **Modal**:用于强打断、需要确认的任务;内容不宜过长。
- **Drawer**:用于不中断上下文的编辑/详情;适合较长内容或分区信息。
- 关闭方式:提供右上角关闭;重要内容关闭需二次确认(有未保存变更时)。
### 4.5 Message / Notification / Alert反馈
- **Message**:短反馈(保存成功/复制成功),不承载复杂信息。
- **Notification**:较长信息、异步结果、可操作提示(带按钮/链接)。
- **Alert**:页面内静态提示/规则说明/风险提示。
落地建议:错误信息尽量包含 **定位信息 + 原因 + 建议动作**(例如“金额格式不合法,请输入最多两位小数”)。
## 5. 主题与 Token “导出”(工程落地)
### 5.1 通过 `ConfigProvider` 统一主题
在应用入口用 `ConfigProvider` 设置全局 token示意
```tsx
import { ConfigProvider, theme } from 'antd';
export function App() {
return (
<ConfigProvider
theme={{
algorithm: theme.defaultAlgorithm,
token: {
colorPrimary: '#1677ff',
borderRadius: 6,
fontSize: 14,
},
components: {
// 组件级 token 覆盖(按需)
},
}}
>
{/* routes */}
</ConfigProvider>
);
}
```
### 5.2 在页面/组件中打印当前 token用于“导出当前主题规范”
你可以在任意页面临时输出(开发态):
```tsx
import { theme } from 'antd';
export function DebugTokens() {
const { token } = theme.useToken();
// 控制台复制即可作为“当前工程实际 token 导出”
console.log('antd token =>', token);
return null;
}
```
如果需要生成 JSON 文件,可以把 `token` 序列化后下载(浏览器端):
```ts
export function downloadJson(filename: string, data: unknown) {
const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json;charset=utf-8' });
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = filename;
a.click();
URL.revokeObjectURL(url);
}
```
## 6. 默认关键值速查AntD v5
- **主色**`#1677ff`
- **基础字号**`14px`
- **默认圆角**`6px`
> 注:完整 token 以 `theme.useToken()` 输出为准(因为你的工程可能有覆盖)。