Files
Neo-ZQYY/_DEL/mp-h5-rules.md
2026-03-15 10:15:02 +08:00

58 lines
2.5 KiB
Markdown
Raw 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.
---
name: mp-h5-rules
description: H5→微信小程序转换硬性规则核心约束始终生效
---
# H5 → 微信小程序转换硬性规则
本规则在所有涉及小程序前端开发的 session 中始终生效。详细操作手册见 Power `miniprogram-h5-conversion`
## 视觉真相
- `docs/h5_ui/pages/*.html` 是唯一视觉参考,任何偏离需用户确认
- 颜色/间距/字号标准值见 `docs/h5_ui/design-tokens.json`,禁止凭记忆硬编码
## 标签映射(严禁在 WXML 中使用 HTML 标签)
`<div>``<view>` | `<span>/<p>``<text>` | `<img>``<image mode="">` | `<svg>`内联→`<image src="xx.svg">` | `<button>``<t-button>` | `<input>``<t-input>`
## rpx 换算
- 精确公式:`rpx = px × 2 × 0.875`(取偶数)
- 圆角例外:`border-radius = px × 2`
- Tailwind 字号必须同步 line-heighttext-xs→22/28rpx | text-sm→24/34rpx | text-base→28/42rpx | text-lg→32/48rpx | text-xl→36/48rpx | text-2xl→42/56rpx
## 颜色灰阶(禁止使用 #333/#666/#999 等非标准值)
gray-1 #f3f3f3(页面背景) | gray-6 #a6a6a6(辅助文字) | gray-9 #5e5e5e(次要文字) | gray-13 #242424(主文字) | primary #0052d9 | success #00a870 | warning #ed7b2f | error #e34d59
## TDesign 优先
凡 TDesign 组件能覆盖的 UI 元素必须使用 TDesign。`t-button icon="xxx"` 只支持内置图标,品牌图标用 `<view>+<image>` 组合。
## 不支持的 CSS
`backdrop-filter``rgba()` | `::before/::after`→额外`<view>`绝对定位 | `background-clip:text`→纯色 | `data:image/svg+xml`→导出独立文件 | `*`通配符→逐个设置
## 截图规则
- H5必须 `browser_run_code` 创建 DPR=1.5 context禁止 `browser_take_screenshot`/分步流程)
- MP导航一律 `relaunch`(禁止 `switch_tab`/`navigate_to`);模式 B自定义 navBar裁剪头部 96px
- 双端对比基准645×1128
- 截图后禁止用 PIL/pixelmatch/image-compare 做像素 diff改用结构化拆解+逐级测量+偏差审计
- `image-compare` MCP 已移除2026-03-12禁止调用
## 偏差判定
≤2rpx 通过 | >2rpx且≤4rpx 警告(P4-P7) | >4rpx 不通过(P0-P3)
## 事件与数据
- 传参用 `data-*`,取值 `e.detail.value`,阻止冒泡用 `catchtap`
- `this.setData()` 驱动视图,布尔属性用 `{{}}`,列表加 `wx:key`
- mock 数据必须与 H5 硬编码值完全一致,标记 `// TODO: 替换为真实 API 调用`
## 安全区
JS `wx.getSystemInfoSync().statusBarHeight` 动态 padding-top禁止 `env(safe-area-inset-top)`