小菜记账 — 设计规格书
概述
产品名称: 小菜记账 (Xiaocai Accounting)
产品类型: 个人记账小程序
设计方向: 可爱 × 高级 (Cute × Premium)
设计风格: Claymorphism (软3D粘土风格) + 极简主义融合
目标平台: 移动端优先 (微信小程序 / Web App)
设计理念
"小菜"暗示温暖、家常、轻松。设计需要传递 「记账也可以很可爱」 的情感,同时通过精致的细节呈现 高级感。
品牌人格
- 友好温暖 — 不冰冷的财务工具,是陪你记账的小伙伴
- 精致克制 — 可爱但不幼稚,高级但不冷淡
- 轻松治愈 — 让记账从负担变成享受
色彩系统
| 角色 |
色值 |
用途 |
| Primary |
#FF8C69 |
主色调,珊瑚橙,温暖活泼 |
| Primary Light |
#FFB89A |
浅色变体,背景装饰 |
| Primary Dark |
#E67355 |
深色变体,按下状态 |
| Secondary |
#6C9BCF |
辅助色,柔和蓝,收入/信任 |
| Accent |
#FFD166 |
强调色,暖金,高亮点缀 |
| Background |
#FFF8F0 |
全局背景,暖奶油色 |
| Surface |
#FFFFFF |
卡片/面板背景 |
| Surface Warm |
#FFF0E6 |
暖色卡片背景 |
| Text Primary |
#2D1B1B |
主文字,暖深棕 |
| Text Secondary |
#8B7E7E |
辅助文字 |
| Text Muted |
#BFB3B3 |
禁用/占位文字 |
| Success |
#7BC67E |
收入/成功,软绿 |
| Warning |
#FFB347 |
提醒,暖橘 |
| Danger |
#FF6B6B |
超支/删除,软红 |
| Border |
#F0E0D6 |
分割线/边框 |
色彩使用原则
- 主色调占界面约 15-20%,避免过度使用
- 背景保持温暖但不刺眼,
#FFF8F0 比纯白更有亲和力
- 文字对比度确保 WCAG AA (4.5:1 以上)
- 深棕色文字替代纯黑,与整体暖色调统一
字体系统
| 用途 |
字体 |
备选 |
权重 |
| 标题 |
Fredoka |
PingFang SC (中文) |
500-700 |
| 正文 |
Nunito |
PingFang SC (中文) |
400-500 |
| 数字/金额 |
Fredoka |
- |
600-700 |
| 特殊标注 |
Caveat (手写体) |
- |
400-600 |
字号规范
| 级别 |
大小 |
用途 |
| H1 |
28px/1.3 |
页面主标题 |
| H2 |
22px/1.3 |
区块标题 |
| H3 |
18px/1.4 |
卡片标题 |
| Body L |
16px/1.6 |
正文 |
| Body |
14px/1.6 |
辅助正文 |
| Caption |
12px/1.5 |
说明文字 |
| Amount XL |
36px/1.2 |
首页总金额 |
| Amount L |
24px/1.2 |
列表金额 |
UI 组件规范
粘土风格核心参数
border-radius: 16-24px (卡片), 12-16px (按钮)
border: 2-3px solid (深色边框强调立体感)
box-shadow: 内阴影 + 外阴影双层结构
- 外阴影:
4px 4px 12px rgba(45, 27, 27, 0.08)
- 内阴影:
inset -2px -2px 6px rgba(45, 27, 27, 0.04)
- 按钮按下:
inset 2px 2px 6px rgba(45, 27, 27, 0.1) + scale(0.97)
按钮
| 类型 |
样式 |
| Primary |
珊瑚橙背景 + 白字 + 粘土阴影 + 圆角16px |
| Secondary |
白色背景 + 3px珊瑚橙边框 + 粘土阴影 |
| Ghost |
无背景 + 珊瑚橙文字 + hover浅色背景 |
| Danger |
软红背景 + 白字 |
卡片
- 白色背景 + 粘土阴影
- 圆角 20px
- 内边距 16-20px
- 点击态: 轻微下沉 (translateY 2px + 阴影缩减)
输入框
- 圆角 14px
- 2px 边框
#F0E0D6,聚焦时变为 Primary
- 内阴影
inset 1px 1px 4px rgba(45,27,27,0.04)
- 高度 48px,方便触摸
图标
- 使用 Lucide Icons (一致的 SVG 图标集)
- 尺寸: 24px (标准), 20px (小), 32px (大)
- 颜色跟随内容层级
页面结构
1. 首页 — 仪表盘
2. 记账页 — 添加记录
- 大号金额输入区 (居中,大字体)
- 分类选择 (圆形图标网格,粘土风格)
- 日期选择
- 备注输入
- 支出/收入切换标签
3. 统计页 — 图表分析
- 月度总览卡片
- 分类饼图/环形图
- 日支出趋势折线图
- 分类排行榜
4. 我的 — 设置
动效规范
| 类型 |
时长 |
缓动 |
说明 |
| 按钮按下 |
150ms |
ease-out |
轻微下沉 + 缩放 |
| 页面切换 |
250ms |
ease-in-out |
淡入 + 上移 8px |
| 数字变化 |
400ms |
ease-out |
数字递增动画 |
| 列表出现 |
300ms |
ease-out |
错位入场 (stagger 50ms) |
| 悬浮反馈 |
200ms |
ease |
阴影加深 + 微上浮 |
动画原则
- 尊重
prefers-reduced-motion
- 不使用夸张弹跳 (粘土风格的自然按压感即可)
- 数字跳动使用
font-variant-numeric: tabular-nums 防止宽度变化
设计令牌系统
间距 (4px 基准)
| Token |
值 |
用途 |
--space-xs |
4px |
图标与文字间距 |
--space-sm |
8px |
紧凑内边距 |
--space-md |
12px |
按钮内边距 |
--space-base |
16px |
卡片内边距、列表间距 |
--space-lg |
20px |
区块间距 |
--space-xl |
24px |
页面内边距 |
--space-2xl |
32px |
大区块间距 |
圆角
| Token |
值 |
用途 |
--radius-sm |
8px |
标签、小按钮 |
--radius-md |
12px |
输入框、普通按钮 |
--radius-lg |
16px |
主按钮、分类图标 |
--radius-xl |
20px |
卡片 |
--radius-full |
9999px |
圆形头像、药丸标签 |
阴影 (粘土风格)
| Token |
值 |
用途 |
--shadow-clay |
4px 4px 12px rgba(45,27,27,0.08), inset -2px -2px 6px rgba(45,27,27,0.04) |
卡片默认 |
--shadow-clay-hover |
6px 6px 16px rgba(45,27,27,0.12), inset -2px -2px 6px rgba(45,27,27,0.04) |
卡片悬浮 |
--shadow-clay-pressed |
inset 2px 2px 6px rgba(45,27,27,0.1) |
按钮按下 |
--shadow-clay-float |
8px 8px 24px rgba(45,27,27,0.1), inset -3px -3px 8px rgba(45,27,27,0.05) |
浮动元素 |
组件库规范
AmountCard (金额卡片)
显示金额的卡片容器,用于首页总览、统计概览等。
| Prop |
类型 |
说明 |
title |
string |
标题文字 |
amount |
number |
金额 (分) |
prefix |
'+' | '-' | '' |
前缀符号 |
variant |
'default' | 'warm' | 'primary' |
样式变体 |
trend |
{ value, direction } |
趋势数据 |
变体:
default: 白色背景 + 粘土阴影
warm: 背景 #FFF0E6
primary: 渐变 #FF8C69 → #FFB89A,文字白色
TransactionItem (交易列表项)
| Prop |
类型 |
说明 |
icon |
string |
Lucide 图标名 |
iconColor |
string |
图标颜色 |
iconBg |
string |
图标背景色 |
name |
string |
交易名称 |
category |
string |
分类名 |
time |
string |
时间 |
amount |
number |
金额 (分) |
type |
'expense' | 'income' |
类型 |
布局: 64px 高,flex 对齐,gap 12px。按下态: 背景 #FFF8F0,100ms。
CategoryIcon (分类图标)
| Prop |
类型 |
说明 |
name |
string |
Lucide 图标名 |
size |
'sm' | 'md' | 'lg' |
尺寸 (20/24/28px) |
color |
string |
图标颜色 |
bgColor |
string |
背景色 |
selected |
boolean |
是否选中 |
尺寸映射:
- sm: 容器 32px,图标 16px,圆角 8px
- md: 容器 44px,图标 22px,圆角 12px
- lg: 容器 56px,图标 28px,圆角 14px
BudgetBar (预算进度条)
| Prop |
类型 |
说明 |
total |
number |
预算总额 (分) |
used |
number |
已用金额 (分) |
showLabel |
boolean |
是否显示标签 |
轨道: 高 8px,圆角 4px,背景 #F0E0D6。
填充: 渐变 #FF8C69 → #FFB89A,宽度 = used/total。
超支态: 填充色变为 #FF6B6B。
动画: 宽度变化 600ms ease-out。
BottomNav (底部导航栏)
| Prop |
类型 |
说明 |
current |
'home' | 'stats' | 'profile' |
当前页 |
onNavigate |
function |
导航回调 |
高度: 56px + safe-area。4 个导航项 + 中间浮动 "+" 按钮。
选中态: 图标填充 #FF8C69,文字 #FF8C69 Nunito 600。
默认态: 图标线条 #BFB3B3,文字 #BFB3B3 Nunito 400。
暗色模式 (v2 预留)
| Token |
Light |
Dark |
| Background |
#FFF8F0 |
#1A1412 |
| Surface |
#FFFFFF |
#2D2422 |
| Surface Warm |
#FFF0E6 |
#3D2E2A |
| Text Primary |
#2D1B1B |
#F5EDE8 |
| Text Secondary |
#8B7E7E |
#A89890 |
| Border |
#F0E0D6 |
#4A3C38 |
| Primary |
#FF8C69 |
#FF8C69 (不变) |
| Shadow |
rgba(45,27,27,0.08) |
rgba(0,0,0,0.3) |
技术选型建议
| 方案 |
技术栈 |
适用场景 |
| A |
Uni-app (Vue3) + Pinia |
跨端小程序,一套代码多平台 |
| B |
Taro (React) + Zustand |
React 生态,跨端 |
| C |
原生微信小程序 |
纯微信生态,性能最优 |
| D |
HTML + Tailwind CSS + Vanilla JS |
Web App,最快原型 |
推荐 A (Uni-app): 跨端能力 + Vue 生态成熟 + 社区资源丰富,适合快速开发上线。
反模式 (避免)
- ❌ 使用 emoji 作为 UI 图标 → ✅ 使用 Lucide SVG 图标
- ❌ 纯黑或冷灰色文字 → ✅ 暖棕色调文字
- ❌ 扁平无层次 → ✅ 粘土阴影创造深度
- ❌ 过于幼稚 → ✅ 克制的圆角和色彩饱和度
- ❌ 文字过多 → ✅ 图标+数字为主,文字为辅
- ❌ 弹出式键盘遮挡 → ✅ 金额输入固定在键盘上方
- ❌ 忽略触摸区域 → ✅ 最小 44×44px 触摸目标
响应式与适配
断点
| 断点 |
宽度 |
设备 |
布局调整 |
| xs |
< 375px |
小屏手机 |
缩小间距,字号减 1px |
| sm |
375-414px |
标准手机 |
基准设计 |
| md |
415-768px |
大手机/小平板 |
内容区 max-width 480px 居中 |
| lg |
> 768px |
平板/H5 |
双列布局,侧边导航 |
小程序 rpx 换算
设计稿 375px → 750rpx (1px = 2rpx)
| 设计稿 |
rpx |
| 12px |
24rpx |
| 14px |
28rpx |
| 16px |
32rpx |
| 18px |
36rpx |
| 20px |
40rpx |
| 24px |
48rpx |
| 36px |
72rpx |
| 48px |
96rpx |
H5 桌面端
- 内容区:
max-width: 420px,居中
- 背景:
#F0E0D6 (深色底)
- 手机框: 圆角 32px + 阴影,模拟手机外观