--- inclusion: fileMatch fileMatchPattern: "**/*.wxml,**/*.wxss,**/h5_ui/**,**/miniprogram/miniprogram/pages/**,**/miniprogram-dev/**" name: mp-h5-dev description: 小程序页面开发详细规范。读取 wxml/wxss/h5_ui/miniprogram 页面文件时自动加载。 --- # 小程序页面开发详细规范 硬性规则见 always-on steering `mp-h5-rules.md`。本文件补充开发流程和详细参考值。 ## 完整颜色灰阶(13 级) | Token | Hex | 用途 | |-------|-----|------| | gray-1 | #f3f3f3 | 页面背景 | | gray-2 | #eeeeee | 分隔线 | | gray-3 | #e7e7e7 | 边框 | | gray-4 | #dcdcdc | 禁用态 | | gray-5 | #c5c5c5 | — | | gray-6 | #a6a6a6 | 辅助文字 | | gray-7 | #8b8b8b | TabBar 默认色 | | gray-8 | #777777 | — | | gray-9 | #5e5e5e | 次要文字 | | gray-10 | #4b4b4b | — | | gray-11 | #393939 | — | | gray-12 | #2c2c2c | — | | gray-13 | #242424 | 主文字 | ## border-radius 标准值 sm 8rpx(rounded) | md 16rpx(rounded-lg) | lg 24rpx(rounded-xl) | xl 32rpx(rounded-2xl) | 3xl 48rpx(rounded-3xl) ## 阴影标准值 lg: `0 8rpx 32rpx rgba(0,0,0,0.06)` | xl: `0 16rpx 48rpx rgba(0,0,0,0.08)` ## 固定高度元素(切断 rpx 取整累积漂移) Tab 栏 84rpx | 筛选栏 120rpx | 列表项 96rpx(标准)/112rpx(含副标题) | 按钮 80rpx | 底部操作区 112rpx ## 页面模式(截图裁剪) 模式 A(系统 navBar,无需裁剪):board-finance, board-coach, board-customer, task-list, my-profile 模式 B(自定义 navBar,裁剪头部 96px):task-detail 系列, coach-detail, customer-detail, performance, notes, chat, chat-history, customer-service-records, performance-records ## Sticky 高度 board-finance 116px | board-coach 110px | board-customer 110px | 其他 0 ## 全局结构处理 | H5 元素 | MP 处理 | |---------|---------| | `.safe-area-top` | 去除 padding-top,MP 由 navigationBar 处理 | | `#bottomNav` | 不迁移,MP 用原生 tabBar | | `.ai-float-btn-container` | `wx:if="{{false}}"` | | `` | `wx:if="{{false}}"` | | `::before/::after` 视觉元素 | 额外 `` 绝对定位模拟 | | Tab 指示线 `::after` | 额外 `` 模拟 | | 气泡尖角 `::after` | 绝对定位 `` + `transform: rotate(45deg)` | ## 复杂视觉元素分层策略 | 复杂度 | 示例 | 方案 | |--------|------|------| | L1 简单 | 纯色标签、单色图标 | WXSS 原生 | | L2 中等 | 渐变标签、多层 gradient | WXSS 多层渐变 | | L3 复杂 | 伪元素纹理、SVG data URI | 导出为图片/SVG 文件 | | L4 不可迁移 | `background-clip:text`、`conic-gradient` | 降级为近似纯色 | ## Banner 迁移模板 ```xml ``` ## SVG 处理决策树 1. TDesign 有等价图标 → `` 2. 品牌/自定义图标 → 导出到 `assets/icons/.svg`,`` 引用 3. CSS 背景 `data:image/svg+xml` → 导出独立文件 4. 简单几何图形 → WXSS border/transform 替代 ## 不可消除差异白名单 字体渲染差异(Chromium vs WebView) | 行内元素高度偏小~7% | 抗锯齿差异 | 环比箭头(SVG vs 文字↑↓) | CSS 渐变文字→纯色 ## CSS 风险特性速查 | 特性 | 出现页面 | 替代方案 | |------|---------|---------| | `backdrop-filter: blur()` | board-finance | `rgba(255,255,255,0.95)` | | `-webkit-background-clip: text` | board-customer | 纯色文字 | | `data:image/svg+xml` | reviewing, no-permission | 导出 PNG/SVG | | `position: fixed` | board-finance/coach/customer, task-list | `position: sticky` 或页面级 fixed | | `@font-face` 远程 | 所有页面 | 系统字体(推荐) | ## 新页面 Checklist - [ ] 无 HTML 标签残留(div/span/p/a/img) - [ ] 内联 SVG 已提取为文件 - [ ] 样式全部 WXSS(rpx 单位) - [ ] 不支持的 CSS 已替代 - [ ] 事件 `bindtap`,传参 `data-*` - [ ] TDesign 组件在 .json 注册 - [ ] 安全区适配(JS statusBarHeight) - [ ] `getDiagnostics` 零错误 - [ ] `wx:key` 已添加 - [ ] 布尔属性用 `{{}}` 包裹 - [ ] mock 数据与 H5 一致 ## 关联资源路径 | 资源 | 路径 | |------|------| | H5 原型 | `docs/h5_ui/pages/*.html` | | 设计 Token | `docs/h5_ui/design-tokens.json` | | 图标映射 | `docs/h5_ui/icon-mapping.md` | | 交互说明 | `docs/h5_ui/interactions/.md` | | 截图产物 | `docs/h5_ui/compare//` | | MP 源码 | `apps/miniprogram/miniprogram/pages/` | | 迁移进度 | `docs/miniprogram-dev/04-audit/PROGRESS.md` | | 踩坑速查 | `docs/miniprogram-dev/05-lessons/pitfalls.md` | | 收敛模式 | `docs/miniprogram-dev/05-lessons/convergence-patterns.md` | | 页面结构速查 | `docs/miniprogram-dev/03-reference/page-structure-map.md` |