uni-app 开发调试时 rpx转换为%字样导致布局错乱

发布于 1周前 作者 h691938207 来自 Uni-App

uni-app 开发调试时 rpx转换为%字样导致布局错乱

操作步骤:

  • 我这边必现,没有操作步骤,可提供源代码

预期结果:

  • 布局正常

实际结果:

  • 布局错乱

bug描述:

  • 下载的hello-uniapp 代码,为什么在开发调试的时候 会出现rpx转换为这样的情况?导致布局就乱掉了!!!!
信息类别 详细信息
产品分类 uniapp/H5
PC开发环境 Mac
PC开发环境版本 12.5 (21G72) M2
HBuilderX类型 正式
HBuilderX版本 4.08
浏览器平台 Chrome
浏览器版本 版本 123.0.6312.107(正式版本) (arm64)
项目创建方式 HBuilderX

alt text alt text


6 回复

rpx是逻辑像素单位,750rpx等于屏幕宽度,适用于移动端开发,pc端不适用,所以进行pc端开发时可以使用px单位。如果想把rpx转px,可以在源码里正则替换,也可以使用三方已经写好的单位转换库。下面介绍下三方库的用法 项目根目录新增文件 postcss.config.js,内容如下。则在编译时,编译器会自动转换rpx单位为px。 // postcss.config.js

const path = require(‘path’)
module.exports = {
parser: ‘postcss-comment’,
plugins: {
‘postcss-import’: {
resolve(id, basedir, importOptions) {
if (id.startsWith(’~@/’)) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(3))
} else if (id.startsWith(’@/’)) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(2))
} else if (id.startsWith(’/’) && !id.startsWith(’//’)) {
return path.resolve(process.env.UNI_INPUT_DIR, id.substr(1))
}
return id
}
},
‘autoprefixer’: {
overrideBrowserslist: [“Android >= 4”, “ios >= 8”],
remove: process.env.UNI_PLATFORM !== ‘h5’
},
// 借助postcss-px-to-viewport插件,实现rpx转px,文档:https://github.com/evrone/postcss-px-to-viewport/blob/master/README_CN.md
// 以下配置,可以将rpx转换为1/2的px,如20rpx=10px,如果要调整比例,可以调整 viewportWidth 来实现
‘postcss-px-to-viewport’: {
unitToConvert: ‘rpx’,
viewportWidth: 200,
unitPrecision: 5,
propList: [’*’],
viewportUnit: ‘px’,
fontViewportUnit: ‘px’,
selectorBlackList: [],
minPixelValue: 1,
mediaQuery: false,
replace: true,
exclude: undefined,
include: undefined,
landscape: false
},
‘@dcloudio/vue-cli-plugin-uni/packages/postcss’: {}
}
} 参考文档:宽屏适配指南


感谢反馈。我试了一下没有复现,hello-uniapp 就能复现吗?看图中好像用了CSS预编译器,是否下载了对应的预编译器插件,提供一下可复现的源代码吧

在 uni-app 开发中,rpx 是一种相对单位,用于在不同屏幕尺寸上实现自适应布局。在开发调试过程中,如果你发现 rpx 被转换为 %,并且导致布局错乱,可能是由于以下原因:

1. 开发工具的模拟器设置问题

  • 问题描述:某些开发工具(如 HBuilderX、微信开发者工具等)在模拟器或预览模式下,可能会将 rpx 转换为 % 来进行适配,但这种转换可能不符合预期,导致布局错乱。
  • 解决方案
    • 检查开发工具的模拟器设置,确保其屏幕尺寸和 DPI 设置与实际设备一致。
    • 尝试切换不同的模拟器模式,查看是否能够正常显示。

2. CSS 代码中使用了错误的单位

  • 问题描述:如果在 CSS 代码中手动将 rpx 转换为 %,可能会导致布局错乱,因为 rpx% 的计算方式不同。
  • 解决方案
    • 避免在 CSS 代码中手动将 rpx 转换为 %,直接使用 rpx 单位。

3. 样式冲突或优先级问题

  • 问题描述:某些情况下,样式冲突或优先级问题可能导致 rpx 被错误地覆盖或转换。
  • 解决方案
    • 使用开发者工具的样式检查功能,查看具体的样式计算过程,确保 rpx 没有被其他样式覆盖或修改。

4. 平台差异

  • 问题描述:不同平台(如微信小程序、H5、App 等)对 rpx 的处理方式可能略有不同,导致在某些平台上出现布局错乱。
  • 解决方案
    • 检查在不同平台上的表现,针对特定平台进行样式调整。
    • 使用条件编译(如 #ifdef)来为不同平台编写特定的样式。

5. 开发工具的 Bug

  • 问题描述:某些开发工具可能存在 Bug,导致 rpx 被错误地转换为 %
  • 解决方案
    • 更新开发工具到最新版本,查看是否修复了相关问题。
    • 如果问题仍然存在,可以尝试使用其他开发工具进行调试。

6. 使用 postcss 插件导致的转换

  • 问题描述:如果你在项目中使用了某些 postcss 插件(如 postcss-px-to-viewport),可能会导致 rpx 被错误地转换为 % 或其他单位。
  • 解决方案
    • 检查 postcss 配置,确保没有对 rpx 进行不必要的转换或处理。

7. 页面缩放或视口设置问题

  • 问题描述:在 H5 环境下,如果页面缩放或视口设置不当,可能导致 rpx 单位计算错误,进而影响布局。
  • 解决方案
    • 确保在 H5 环境下正确设置了 viewport,例如:
      <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!