在微信小程序中,px
和 rpx
是两种常用的样式单位,它们的用途和表现方式有所不同。以下是详细的对比说明、代码示例以及总结表格。
一、px
和 rpx
的定义与差异
1. px
(像素)
- 类似于 Web 开发中的像素单位。
- 在不同设备上显示的物理尺寸可能不一致(取决于屏幕密度)。
- 不具备自适应能力。
2. rpx
(responsive pixel)
- 微信小程序特有的响应式单位。
- 默认以 iPhone6 屏幕宽度为基准(750rpx = 375px),自动适配不同设备。
- 1rpx 在 iPhone6 上等于 0.5px。
设备宽度 | 逻辑像素宽度(CSS 像素) | rpx 换算比例 |
---|---|---|
iPhone6 | 375px | 1rpx = 0.5px |
其他设备 | 自动适配 | 动态换算 |
二、为什么微信小程序默认设计稿宽度是 750rpx
?
微信小程序官方推荐使用 750rpx 作为页面的宽度标准,原因如下:
✅ 标准化设计
- 类似于移动端设计稿通常以 iPhone6 为参考(750x1334 @2x),便于 UI 切图和开发对齐。
- UI 工具如 Sketch、Figma 等常以 750px 宽度出图,方便直接使用。
✅ 响应式适配
- 小程序运行时会根据设备实际宽度动态计算
rpx -> px
,保证视觉一致性。 - 例如:在 iPhone13 Pro Max 上,750rpx 可能对应 414px(逻辑像素)。
✅ 简化开发流程
- 开发者可直接按照 UI 图标注的
rpx
数值编写样式,无需手动换算。
三、代码示例说明
示例 1:固定宽度(使用 px
)
/* index.wxss */
.box {
width: 375px; /* 固定像素,在不同设备上宽度不变 */
height: 100px;
background-color: #f00;
}
❗️问题:在小屏手机上可能会超出屏幕宽度,导致布局错乱。
示例 2:响应式宽度(使用 rpx
)
/* index.wxss */
.box {
width: 750rpx; /* 在所有设备上占满整个屏幕宽度 */
height: 200rpx;
background-color: #0f0;
}
✅ 效果:自动适配不同设备,保持比例。
示例 3:混合使用 px
和 rpx
/* index.wxss */
.container {
width: 750rpx; /* 占满屏幕 */
padding: 20px; /* 固定像素,不会缩放 */
}
.title {
font-size: 36rpx; /* 字号自适应 */
}
📌 注意:混合使用时要注意部分样式(如
padding
、border
)使用px
可能影响整体适配效果。
四、完整 WXML + WXSS 示例
文件结构:
index.wxml
index.wxss
index.wxml:
<!-- index.wxml -->
<view class="container">
<view class="box">这是一个盒子</view>
</view>
index.wxss:
/* index.wxss */
.container {
width: 750rpx;
padding: 20px;
background-color: #eee;
}
.box {
width: 700rpx;
height: 200rpx;
margin: 20rpx auto;
background-color: #09f;
color: white;
display: flex;
justify-content: center;
align-items: center;
font-size: 36rpx;
}
💡 效果:无论设备大小,
.box
总是居中且宽度合适,字体大小也随屏幕变化调整。
五、总结对比表格
特性 | px | rpx |
---|---|---|
是否响应式 | ❌ 否 | ✅ 是 |
是否自动适配 | ❌ | ✅ |
是否适合用于布局 | ❌ 推荐仅用于特殊需求 | ✅ 推荐用于主要布局 |
默认换算关系 | N/A | 1rpx = 0.5px (iPhone6) |
是否受系统设置影响 | ❌ | ✅(跟随用户字号设置) |
推荐使用场景 | 固定边框、图标尺寸等 | 页面布局、组件尺寸、字体大小等 |
是否被官方推荐 | ❌ | ✅ |
六、常见问题解答
Q1:如何查看当前设备的 rpx
转换比例?
可以通过 JavaScript 获取设备信息:
// index.js
Page({
onLoad() {
const systemInfo = wx.getSystemInfoSync();
console.log('屏幕宽度:', systemInfo.windowWidth); // 单位是 px
console.log('rpx 换算比例:', systemInfo.windowWidth / 750); // 1rpx 对应多少 px
}
});
Q2:是否可以只用 rpx
?什么时候应该用 px
?
- ✅ 大多数情况下建议使用
rpx
。 - ⚠️ 个别情况使用
px
:- 需要精确控制的元素(如 1px 边框)
- 图标尺寸(避免缩放变形)
如需了解响应式布局技巧或结合 Flex 布局的高级用法,也可以继续提问!