5.0 KiB
PicStack 设计规范
🎨 视觉设计系统
配色方案
主色系
```css 主色 (Primary): #1677FF /* 清爽科技蓝 / 品牌强调色 (Brand): #0958D9 / 深蓝强调 / 辅助色 (Secondary): #52C41A / 成功绿 */ ```
背景层级
```css Base Background: #F5F7FA /* 最外层背景 / Surface Background: #FFFFFF / 容器背景 / Section Background: #FAFBFC / 区块背景 */ ```
文本色系
```css 主文本: #262626 /* 深灰黑 / 副文本: #595959 / 中灰 / 弱文本: #8C8C8C / 浅灰 / 禁用文本: #BFBFBF / 超浅灰 */ ```
功能色系
```css 成功: #52C41A /* 绿色 - 上传成功 / 警告: #FAAD14 / 橙色 - 存储空间不足 / 错误: #FF4D4F / 红色 - 上传失败 / 信息: #1677FF / 蓝色 - 提示信息 / 链接: #1677FF / 蓝色链接 */ ```
字体体系
字体族
```css 中文: 'PingFang SC', 'Microsoft YaHei', sans-serif 英文: 'Inter', 'SF Pro Display', -apple-system, sans-serif 等宽: 'JetBrains Mono', 'Fira Code', 'Consolas', monospace ```
字号等级
```css XS: 12px /* 辅助文本 / SM: 14px / 常规文本 / BASE: 16px / 基础文本 / LG: 18px / 小标题 / XL: 24px / 标题 / 2XL: 32px / 大标题 / 3XL: 48px / Hero 标题 */ ```
字重
```css Normal: 400 Medium: 500 Semibold: 600 Bold: 700 ```
间距系统(8px 基准)
```css XS: 4px SM: 8px MD: 16px LG: 24px XL: 32px 2XL: 48px 3XL: 64px ```
圆角
```css SM: 4px /* 按钮、输入框 / MD: 8px / 卡片 / LG: 12px / 大卡片 / XL: 16px / Hero 区块 / FULL: 50% / 头像 */ ```
阴影系统
```css 卡片阴影: 0 2px 8px rgba(0, 0, 0, 0.08) 悬浮阴影: 0 4px 16px rgba(0, 0, 0, 0.12) 弹窗阴影: 0 8px 32px rgba(0, 0, 0, 0.16) ```
🧩 组件规范
卡片组件
- 统一使用
borderRadius: 12px - 默认阴影:
0 2px 8px rgba(0, 0, 0, 0.08) - Hover 状态: 上移 4px + 阴影加深
按钮组件
- 主按钮: 蓝色背景 + 白色文字
- 次要按钮: 白色背景 + 蓝色边框
- 危险按钮: 红色背景/文字
- 最小高度: 36px (默认) / 42px (大) / 28px (小)
输入框
- 默认高度: 36px
- 圆角: 4px
- Focus 状态: 蓝色边框
- Hover 状态: 浅蓝边框
🎬 动效规范
过渡时长
```css Fast: 150ms /* 快速交互 / Base: 300ms / 标准过渡 / Slow: 500ms / 复杂动画 */ ```
缓动函数
```css 标准: cubic-bezier(0.4, 0, 0.2, 1) 进入: cubic-bezier(0, 0, 0.2, 1) 退出: cubic-bezier(0.4, 0, 1, 1) ```
常用动效
- 卡片 Hover:
translateY(-4px) + 阴影提升 - 按钮 Hover:
scale(1.02) - 图片加载:
opacity 0 → 1 (300ms) - 页面切换:
fadeIn animation (500ms)
📐 布局规范
网格系统
- 基于 Ant Design 24 列栅格
- Gutter: 16px (默认) / 24px (大屏)
响应式断点
```css xs: < 576px /* 手机 / sm: ≥ 576px / 平板竖屏 / md: ≥ 768px / 平板横屏 / lg: ≥ 992px / 笔记本 / xl: ≥ 1200px / 桌面 / xxl: ≥ 1600px / 大屏 */ ```
页面布局
``` Header (64px 固定高度) ├─ Sidebar (220px 固定宽度) └─ Content (自适应) └─ Footer (70px 固定高度) ```
🖼️ 图片规范
图片网格
- 默认:
grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)) - 移动端:
minmax(160px, 1fr) - Gap: 16px (桌面) / 12px (移动)
缩略图
- 尺寸: 240x240px
- 圆角: 8px
- 加载骨架屏: 灰色渐变动画
♿ 可访问性
颜色对比度
- 正文文字: 至少 4.5:1
- 大号文字: 至少 3:1
- 交互元素: 至少 3:1
键盘导航
- 所有交互元素支持 Tab 导航
- Focus 状态明显可见
- 支持 Enter/Space 触发
ARIA 标签
- 为图片添加 alt 属性
- 为图标按钮添加 aria-label
- 为表单控件添加 aria-describedby
📝 代码规范
命名约定
- 组件: PascalCase (如
ImageCard) - 文件名: PascalCase (如
ImageCard.tsx) - 变量/函数: camelCase (如
handleUpload) - 常量: UPPER_SNAKE_CASE (如
MAX_FILE_SIZE) - CSS 类: kebab-case (如
image-grid)
文件组织
``` Component/ ├── index.tsx # 主组件 ├── styles.css # 样式文件(可选) ├── types.ts # 类型定义(可选) └── README.md # 组件文档(可选) ```
注释规范
```typescript /**
- 组件功能简述
- @param props - 参数说明
- @returns JSX 元素 */ ```
🎯 最佳实践
性能优化
- 使用 React.memo 避免不必要的重渲染
- 图片懒加载 (Intersection Observer)
- 虚拟滚动处理大列表
- 路由懒加载 (React.lazy + Suspense)
用户体验
- 加载状态使用骨架屏
- 错误状态提供重试选项
- 成功操作显示提示消息
- 危险操作二次确认
状态管理
- 全局状态使用 Zustand
- 表单状态使用本地 state
- 服务端状态使用 React Query (未来)
持续更新中...