petstore-docs/前端UI规范.md
2026-04-12 23:24:40 +08:00

108 lines
3.4 KiB
Markdown
Raw Permalink 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.

# 前端 UI 规范petstore
## 目标
- 统一视觉风格,避免页面“各写各的”。
- 保证移动端可读性和可点击性。
- 降低后续新增页面的设计与维护成本。
## 设计基线
- 主色:`#16a34a`
- 页面背景:`var(--pet-bg)`
- 主文案:`var(--pet-text)`
- 次级文案:`var(--pet-subtext)`
- 分割/边框:`var(--pet-border)`
- 卡片阴影:`var(--pet-card-shadow)`
以上变量统一在 `src/assets/global.css` 维护,页面中不要写死同类颜色。
## 字体与层级
- 页面标题18px / 700`.text-title`
- 正文14px / 400~500`.text-body`
- 说明/辅助12px / 400`.text-sub`
- 避免 11px 及以下文本,移动端可读性较差。
## 间距规范
- 统一间距标尺8 / 12 / 16 / 24优先使用全局变量
- 页面左右基础边距16px`.page-section`
- 模块间距12px`.section-gap`
- 卡片圆角12~18px
- 表单项垂直间距8~12px
- 底部保留区:至少 `120rpx`(避免被底栏遮挡)
推荐使用:
- 页面容器:`.page-shell`
- 模块容器:`.page-section`
- 模块间隔:`.section-gap`
- 表单项包装:`.form-field-wrap`
- 模块标题:`.module-title`
## 组件规范
### 顶部导航
- 使用绿色渐变背景 + 轻阴影(`.nav-gradient`)。
- 标题使用 18/700。
- 左侧返回统一使用 `AppIcon(back)`
- 返回按钮触达区保持足够(建议 40px 以上),并使用统一按压反馈(`.nav-back:active`)。
### 按钮
- 主按钮绿色渐变白字12px 圆角,高度 44px。
- 次按钮:浅底 + 边框,颜色低于主按钮一个层级。
- 同区域最多一个高强调按钮,避免视觉噪音。
### 输入框
- 使用统一 `.van-field` 样式。
- 聚焦态有明显边框和光晕反馈。
- 文本域最小高度 84~96px行高 1.45+。
### 卡片
- 白底 + 细边框 + 轻阴影。
- 不要叠加过多投影层。
- 卡片内信息按“标题 > 关键值 > 说明”组织。
- 卡片点击态统一轻微下沉 + 透明度变化,避免“有的会动有的不会动”。
### 图标
- 全站优先使用统一 `AppIcon`,避免 emoji 与图标混用。
- 新增图标时先补充到 `src/components/AppIcon.vue`,再在页面内复用。
- 空态/占位图(如图片占位、头像角标)也使用同一套图标风格(如 `camera`)。
### 空状态
- 用统一 `.empty`,文案简短明确。
- 避免裸文本直接贴在背景上。
## 交互与可用性
- 可点击区域建议不小于 40x40。
- 反馈闭环完整:点击后要有 loading / toast / 状态变化。
- 关键操作(删除、取消)保持二次确认。
- 统一微交互:按钮、卡片、列表项按压反馈节奏一致(约 160ms
## 禁止项
- 禁止在模板里堆叠大量内联 `style`
- 禁止同一功能页使用多个不同风格按钮。
- 禁止页面之间同类元素样式明显不一致(例如顶部导航、卡片、输入框)。
- 禁止在业务页面重复定义全局已有的间距/标题样式(如 `.module-title`、`.form-field-wrap`)。
- 禁止新增 emoji 图标作为主视觉元素。
## 新页面接入清单
- 引入并复用全局样式,不重复造轮子。
- 先搭框架:`page-shell -> nav -> sections -> bottom safe area`。
- 自检 4 项:
- 视觉是否与已有页一致
- 小屏是否可读
- 点击区域是否足够
- 是否存在硬编码颜色/间距