一、upx
uni-app 使用 upx 作为默认尺寸单位, upx 是相对于基准宽度的单位,可以根据屏幕宽度进行自适应。
uni-app 规定屏幕基准宽度750upx。开发者可以通过设计稿基准宽度计算页面元素 upx 值,设计稿 1px 与框架样式 1upx 转换公式如下:
设计稿 1px / 设计稿基准宽度 = 框架样式 1upx / 750upx
举例说明:
若设计稿宽度为 640px,元素 A 在设计稿上的宽度为 100px,那么元素 A 在 uni-app 里面的宽度应该设为:750 * 100 / 640,结果为:117upx。
若设计稿宽度为 375px,元素 B 在设计稿上的宽度为 200px,那么元素 B 在 uni-app 里面的宽度应该设为:750 * 200 / 375,结果为:400upx。
使用注意:
1.动态绑定的 style 不支持直接使用 upx。
<!-- - 静态upx赋值生效 -->
<view class="test" style="width:200upx"></view>
<!-- - 动态绑定不生效 -->
<view class="test" :style="{width:winWidth + 'upx;'}"></view>
2.使用 uni.upx2px(Number) 转换为 px 后再赋值。
<template>
<view>
<view :style="{width: h_Width}">
</view>
</view>
</template>
<script>
export default {
computed: {
h_Width() {
return uni.upx2px(750 / 2) + 'px';
}
}
}
</script>
二、rpx
官方推荐使用rpx替代upx
- 在普通css写法里,upx会被编译器编译;但动态绑定时,upx不能像rpx那样直接支持动态绑定,还得再使用uni.upx2px方法用来动态计算。
- 其他几家小程序平台陆续都兼容了rpx机制,rpx不再是微信的专用单位,而成为了这个行业的通用单位。
- 从HBuilderX 2.0.5起,已经支持rpx的正常着色和px2rpx的ide代码提示转换功能;官方也修改了uni-app文档中关于尺寸单位的介绍,不再推荐upx的使用,而推荐rpx。在App端和H5端支持rpx的动态绑定,实现rpx全端通用。(这个策略调整,不影响开发者的已有代码正常运行,开发者仍然可以使用upx和uni.upx2px,也可以改用rpx,没有必要批量调整老代码)
注意:响应式单位upx和rpx是动态宽度单位
- 很多开发者对响应式单位依赖太严重了,比如组件高度或字体大小也使用upx/rpx。
- 只有当你需要某元素的单位要根据屏幕宽度大小变化时,才需要rpx这类动态宽度单位。
- 一般情况下高度和字体大小是不应该根据屏幕宽度变化的,除非你的字体大小想根据屏幕宽度变化。
拓展:在设置文件mainfest.json里开启px转rpx(默认关闭),所有的px可一键转换为rpx
px转rpx
1、动态绑定的 style 不支持直接使用 upx。
<!-- - 静态upx赋值生效 -->
<view class="test" style="width:200upx"></view>
<!-- - 动态绑定不生效 -->
<view class="test" :style="{width:winWidth + 'upx;'}"></view>
官方收到很多开发小程序的用户投诉upx不能像rpx那样直接支持动态绑定,还得再使用uni.upx2px方法。
官方反思了策略,既然微信不可能支持upx的动态绑定,不如我们在App端和H5端来支持rpx的动态绑定。这样rpx就可以全端通用,且支持动态绑定,不再需要uni.upx2px方法。
- 注意 rpx 是和宽度相关的单位,屏幕越宽,该值实际像素越大。如不想根据屏幕宽度缩放,则应该使用 px 单位。
- 如果开发者在字体或高度中也使用了 rpx ,那么需注意这样的写法意味着随着屏幕变宽,字体会变大、高度会变大。如果你需要固定高度,则应该使用 px 。
- rpx不支持动态横竖屏切换计算,使用rpx建议锁定屏幕方向