3.4 KiB
3.4 KiB
前端 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 项:
- 视觉是否与已有页一致
- 小屏是否可读
- 点击区域是否足够
- 是否存在硬编码颜色/间距