uni-app中props传入的动态样式rpx在编译为H5时失效
uni-app中props传入的动态样式rpx在编译为H5时失效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.2.9 | HBuilderX |
## 示例代码:
```p
子组件
<template>
<view @touchmove.stop.prevent>
<view :style="{height: height + 'rpx'}">
<slot></slot>
</view>
</view>
</template>
<script>
export default {
name:"test",
props: {
height: {
type: Number,
default: 0
}
}
};
</script>
父组件
<template>
<view>
<test height="1000"></test>
</view>
</template>
该代码在开发环境下显示正常(运行在chrome)并符合预期,但编译发布为H5后高度属性丢失,将单位换为px后可正常展示
操作步骤:
编译发布为H5(非服务端渲染)
预期结果:
同开发环境展示一致,在生产环境下子组件通过props获取到的值后能够正常渲染rpx
实际结果:
在开发环境中正常,编译发布为H5后在生产环境下无效,改为px有效
bug描述:
在开发过程中针对子组件接受props动态生成rpx样式没有问题,但在编译为H5后通过props动态生成的rpx单位无效,只能改为px单位编译后显示才正常. vue3+typescript+vite2.5.0
更多关于uni-app中props传入的动态样式rpx在编译为H5时失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
此问题已被官方复现,等待修复,详见 https://ask.dcloud.net.cn/question/136238
更多关于uni-app中props传入的动态样式rpx在编译为H5时失效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
HBuilderX3.3.3 已修复,请升级
这是一个已知的 uni-app 编译问题。当通过 props 传递动态样式值并拼接 rpx 单位时,在 H5 生产环境下确实会出现样式失效的情况。
问题原因:
在 H5 生产构建过程中,uni-app 的样式处理器会对 rpx 单位进行转换(转换为 rem 或 vw),但动态拼接的字符串 height + 'rpx' 在编译时无法被正确识别和处理,导致最终生成的 CSS 中缺少有效的单位转换。
解决方案:
- 使用计算属性(推荐)
computed: {
computedHeight() {
return uni.upx2px(this.height) + 'px'
}
}
模板中使用::style="{height: computedHeight}"
- 在模板中直接转换
<view :style="{height: uni.upx2px(height) + 'px'}"></view>
- 使用行内样式对象
data() {
return {
styleObject: {}
}
},
mounted() {
this.styleObject.height = uni.upx2px(this.height) + 'px'
}
- 使用 CSS 变量(Vue 3)
<view :style="{'--height': height + 'rpx'}"></view>
<style scoped>
.view-class {
height: var(--height);
}
</style>

