什么是 upx?
upx 是 uni-app 提供的一种自适应尺寸单位。它的全称可以理解为 "uni-app pixel"。
它的设计理念和微信小程序的 rpx 完全相同,核心目标是:让你的页面元素在不同屏幕宽度的设备上实现按比例自适应。
为什么要用 upx?(设计原理)
在传统网页开发中,我们使用 px作为单位,但在不同宽度的手机屏幕上,固定 px的显示效果差异很大。upx就是为了解决这个问题而生的。
它的工作原理基于一个简单的规则:
官方规定:屏幕总宽度固定为 750upx。
这意味着:
无论你的手机屏幕是 iPhone 12 Mini (宽度 375px) 还是 iPhone 12 Pro Max (宽度 428px),在 uni-app 眼里,它们的屏幕逻辑宽度都是 750upx。
每个设备的 1px等于多少 upx,是由公式动态计算出来的。
upx 与 px 的换算(核心规则)
换算公式:px = upx * (屏幕宽度 / 750)
换句话说:设备屏幕的实际像素宽度(px)除以 750,就是 1upx 在该设备上对应的像素值(px)。
我们来看几个例子:
设备
屏幕物理宽度 (px)
1upx 等于多少 px?
计算过程
一个 750upx 的视图宽度等于?
iPhone 6/7/8
375 px
0.5 px
375 / 750 = 0.5
充满整个屏幕宽度 (375px)
iPhone 12/13
390 px
0.52 px
390 / 750 ≈ 0.52
充满整个屏幕宽度 (390px)
iPhone 12 Pro Max
428 px
~0.57 px
428 / 750 ≈ 0.57
充满整个屏幕宽度 (428px)
结论:
一个 750upx 的元素,在任何宽度的屏幕上都会撑满整个屏幕宽度。
一个 375upx 的元素,在任何屏幕上都会占据屏幕宽度的一半。
如何使用 upx?
在 uni-app 的 Vue 文件或 NVue 文件的样式(
这段代码在不同宽度屏幕上的表现:
.box的宽度在任何屏幕上都是 (屏幕宽度 / 750) * 700px,几乎充满屏幕。
.logo的宽度在任何屏幕上都是屏幕宽度的 2/5(300/750)。
字体、内外边距都会按比例缩放,保持整个页面的布局协调。
最佳实践与注意事项
主要用于尺寸属性:width, height, margin, padding, font-size, top, left等尺寸相关的属性强烈推荐使用 upx。
不用于装饰属性:border, box-shadow, text-shadow等细小的装饰性属性通常使用 px,以保证1像素边框在任何屏幕上都能清晰显示。
NVue 的差异:在 NVue 中,upx是唯一支持的 CSS 单位(px会被直接忽略),并且不支持百分比 %。布局必须使用 flexbox结合 upx来实现。
与 rpx 的关系:upx和微信小程序的 rpx是等价的。在编译到小程序平台时,upx会直接被转换为 rpx。
设计稿适配:如果 UI 设计师给了 750px宽的设计稿,那么设计稿上的元素尺寸是多少 px,你在代码里就写多少 upx,即可实现完美还原。
总结
特性
upx
目的
实现跨屏幕尺寸的自适应布局
规则
屏幕总宽度恒为 750upx
公式
px = upx * (屏幕宽度 / 750)
使用场景
宽度、高度、字体大小、边距等尺寸属性
优点
极大简化了移动端适配工作,一套代码适配不同屏幕
掌握 upx是进行 uni-app 开发的基础,它能让你轻松写出自适应各种屏幕的优雅界面。