# 踩坑速查与迁移经验 > 经 User 确认后录入的实践经验。AI 发现新踩坑点时先提出建议,User 确认后再录入。 > 按类别组织,每条记录包含:场景、问题、解决方案、影响页面。 --- ## WXML 模板 ### 禁止在 `{{}}` 中调用 JS 方法 - 场景:WXML 模板中使用 `.toFixed()`、`.map()` 等 - 问题:小程序模板不支持 JS 方法调用 - 方案:用 WXS 模块 `utils/format.wxs` - 影响:所有页面 ### TabBar 页面跳转必须用 `wx.switchTab` - 场景:从非 tabBar 页面跳转到 task-list、board-finance、my-profile - 问题:`navigateTo` 会静默失败 - 方案:tabBar 页面一律用 `wx.switchTab` - 影响:所有涉及 tabBar 跳转的页面 --- ## 样式与布局 ### 一屏页面用 `height: 100vh` 而非 `min-height` - 场景:login、reviewing、no-permission 等单屏页面 - 问题:`min-height: 100vh` 在某些情况下不生效 - 方案:`height: 100vh` + `box-sizing: border-box` - 影响:login, reviewing, no-permission ### 状态栏适配禁止用 `env(safe-area-inset-top)` - 场景:自定义 navBar 页面的顶部 padding - 问题:小程序不支持 `env()` CSS 函数 - 方案:JS `wx.getSystemInfoSync().statusBarHeight` 动态设置 - 影响:所有自定义 navBar 页面 ### `padding-top + 100vh` 必须配合 `box-sizing: border-box` - 场景:有顶部 padding 的全屏页面 - 问题:不加 box-sizing 会导致底部内容溢出 - 方案:始终添加 `box-sizing: border-box` - 影响:所有全屏页面 --- ## TDesign 组件 ### `t-button icon` 只支持内置图标 - 场景:按钮中使用品牌图标(微信 logo 等) - 问题:`icon` 属性只接受 TDesign 内置图标名 - 方案:用 `` + `` 组合替代 - 影响:login 页面微信登录按钮 ### TDesign 默认样式优先级高 - 场景:需要大幅覆盖 TDesign 组件样式 - 问题:CSS 变量和外部样式类不够用时,`!important` 也可能不生效 - 方案:直接用原生 `` 实现,绕开样式干扰 - 影响:视具体组件 --- ## 资源引用 ### 所有 H5 内联 SVG 必须导出为独立文件 - 场景:H5 中直接写在 HTML 内的 `` 元素 - 问题:小程序不支持内联 SVG - 方案:导出为 `.svg` 文件存放 `assets/icons/`,用 `` 引用 - 影响:所有含内联 SVG 的页面 ### 引用不存在的图片会 500 错误 - 场景:WXML 中 `` 指向不存在的文件 - 问题:不是 404 而是 500 错误,难以排查 - 方案:用 CSS 渐变、emoji、`` 替代;或确保文件存在 - 影响:所有页面 --- ## 截图与对比 ### rpx 取整导致累积高度偏移 - 场景:多屏长页面的中间屏截图对比 - 问题:MP 页面总高度比 H5 短 ~10%,中间屏内容窗口错位 - 方案:使用锚点对齐法(按元素位置对齐而非 scrollTop 数值) - 影响:board-finance, performance 等长页面 - 发现日期:2026-03-10 ### AI 浮动按钮动画造成随机差异 - 场景:截图时 ai-float-button 的 gradientShift 动画处于不同帧 - 问题:每次截图差异 ~1% - 方案:双端截图前隐藏(H5 用 JS,MP 用 `wx:if="{{false}}"`) - 影响:所有含 ai-float-button 的页面 - 发现日期:2026-03-10 ### 禁止跨维度套用布局假设,H5 原型是唯一视觉真相 - 场景:board-customer "最专一"卡片的 `.loyal-table` 布局 - 问题:其他维度(最应召回等)的 `card-mid-row` / `card-assistant-row` 有 `ml-11`(80rpx 对齐头像右侧),开发时"合理推断"表格也应该加 `margin-left: 80rpx`。但 H5 原型中表格容器没有 `ml-11`,是从卡片 padding 开始的(left=16px)。Playwright 实测才发现偏差 - 方案:每个维度的每个组件都必须回到 H5 HTML 逐一确认 Tailwind 类,禁止从其他维度"类推"。不确定时用 Playwright `getBoundingClientRect()` 实测 H5 元素位置 - 影响:所有多维度页面(board-customer 8 维度、board-coach 4 维度) - 发现日期:2026-03-12 ### H5 与 MP mock 数据不同,像素级 diff 需结合结构比对 - 场景:用 PIL/numpy 或 image-compare 对比 H5 和 MP 截图 - 问题:H5 原型使用硬编码 mock 数据(如孙先生/王先生/李女士),MP 使用后端返回的测试数据(王先生/李女士/张先生),文字内容不同导致像素 diff 高达 11%,18 个分段覆盖全页面,无法区分"数据差异"和"样式差异" - 方案:像素级 diff 仅用于发现大面积结构偏移(窗口错位、整块缺失)。样式还原度验证的主要方法是 Tailwind 类→rpx 值逐项比对表,逐一确认每个 CSS 属性的换算结果 - 影响:所有页面的截图对比流程 - 发现日期:2026-03-12 ### Tailwind→WXSS 映射必须逐项建表验证 - 场景:将 H5 Tailwind 类翻译为小程序 WXSS - 问题:凭记忆或经验直接写 WXSS 值容易出错——`font-medium` 是 500 不是 600,`gap-1` 是 4px 不是 2px,`space-y-2` 是 8px 不是 4px。错误在视觉上不明显但会累积 - 方案:对每个组件建立完整的对照表(H5 Tailwind 类 → 计算值 px → rpx 换算 → MP WXSS 值),逐行核对。参考速查表:`2→4, 4→8, 6→10, 8→14, 10→18, 12→22, 14→24, 16→28, 20→36, 24→42` - 影响:所有页面的 WXSS 编写 - 发现日期:2026-03-12 ### 相邻元素间距叠加导致高度翻倍 - 场景:经营一览的 `.overview-grid-2` 底部 padding 32rpx + `.ai-insight-section` margin-top 32rpx,间距翻倍为 64rpx - 问题:H5 中 grid 无 margin-bottom,间距完全由下方元素的 `mt-4`(16px) 提供。MP 中两端都加了间距,导致块间距翻倍、整体高度偏高 - 方案:校对间距时必须确认「这段间距是谁提供的」——上方元素的 padding-bottom 还是下方元素的 margin-top。用 Playwright `getComputedStyle` 实测 H5 两个相邻元素的 margin/padding,确认间距归属后只在一端设置 - 影响:所有包含多个子区块的板块(经营一览、预收资产等) - 发现日期:2026-03-12 ### 用 Playwright 实测 H5 比手动解析 Tailwind 更可靠 - 场景:H5 原型文件是单行 minified HTML,手动读取 Tailwind 类名容易遗漏或误判 - 问题:Tailwind 类名组合后的实际渲染值不直观(如 `p-4` 在嵌套容器中可能被覆盖,`space-y-2` 的实际 gap 取决于子元素数量),手动推算容易出错 - 方案:通过 `browser_run_code` 创建 375×812 viewport + DPR 1.5 的 context,用 `getComputedStyle` + `getBoundingClientRect` 直接拿到渲染后的实际 px 值,再按换算规则转 rpx。这个方法应作为所有页面校对的标准流程 - 影响:所有页面的 WXSS 校对流程 - 发现日期:2026-03-12 ### Tailwind 字号类自带 line-height,WXSS 必须同步补齐 - 场景:校对经营一览的现金流水概览 4 个块,H5 明显比 MP 高 - 问题:Tailwind 的 `text-xs`/`text-sm`/`text-lg`/`text-xl` 等字号类捆绑了特定的 `line-height`(如 `text-lg` = `font-size: 18px; line-height: 28px`),但 WXSS 只写了 `font-size` 没写 `line-height`,小程序默认行高约 1.2,远小于 Tailwind 的行高,导致每行文字占据的垂直空间不足,块整体矮了一截 - 方案:每个 Tailwind 字号类转 WXSS 时,必须同时写 `font-size` 和 `line-height`。完整对照表(87.5% 缩放): | Tailwind | font-size (px) | line-height (px) | WXSS font-size | WXSS line-height | |----------|---------------|------------------|----------------|-----------------| | `text-xs` | 12 | 16 | 22rpx | 28rpx | | `text-sm` | 14 | 20 | 24rpx | 34rpx | | `text-base` | 16 | 24 | 28rpx | 42rpx | | `text-lg` | 18 | 28 | 32rpx | 48rpx | | `text-xl` | 20 | 28 | 36rpx | 48rpx | | `text-2xl` | 24 | 32 | 42rpx | 56rpx | - 影响:所有页面的所有文字元素 - 发现日期:2026-03-12 --- > 新增经验请按以上格式录入,包含:场景、问题、解决方案、影响页面、发现日期(可选)。