重点:官方推荐使用rpx替代upx,参考:推荐使用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(默认关闭 “transformPx” : false,),所有的px可一键转换为 rpx:
(作者:瑟闻风倾 链接:https://www.jianshu.com/p/97dc7c4a5ebf)
<!-- - 静态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方法。
注意:
<template>
<view>
<view class="half-width" :style="{width: halfWidth}">
半屏宽度
</view>
</view>
</template>
<script>
export default {
computed: {
halfWidth() {
return uni.upx2px(750 / 2) + 'px';
}
}
}
</script>
<style>
.half-width {
background-color: #FF3333;
}
</style>
即:? rpx / 750rpx = 设计px / 手机屏幕px
设备 | rpx换算px (屏幕宽度/750) | px换算rpx (750/屏幕宽度) |
---|---|---|
iPhone5 | 1rpx = 0.42px | 1px = 2.34rpx |
iPhone6 | 1rpx = 0.5px | 1rpx = 2rpx |
iPhone6 Plus | 1rpx = 0.552px | 1rpx = 1.81rpx |
建议: 开发微信小程序时设计师可以用 iPhone6 作为视觉稿的标准。
注意: 在较小的屏幕上不可避免的会有一些毛刺,请在开发时尽量避免这种情况。
uni.setStorageSync("token", this.loginObject.token); // 设置Storage数据
uni.getStorageSync("token") // 获取Storage数据
uni.removeStorageSync('storage_key'); // 移除Storage数据
uni.clearStorage(); // 清理本地数据缓存
// 可以封装为公共的组件。使用之前的方法调用
uni.showToast({
title: "网络错误", // 提示的内容,长度与 icon 取值有关。
icon: "none", // 图标,有效值详见下方说明。
image:"", // 自定义图标的本地路径
mask:false, // 遮罩层
duration:"1500", // 延迟时间
});
// 放弃使用,路由统一封装了。
<navigator url="navigate/navigate?title=navigate" hover-class="navigator-hover">
<button type="default">跳转到新页面</button>
</navigator>
<navigator url="redirect/redirect?title=redirect" redirect hover-class="other-navigator-hover">
<button type="default">在当前页打开</button>
</navigator>
uni.navigateTo({
url: "login" }); //url:里的路径如果是在一个文件夹里则可以直接这样写:
uni.navigateTo({
url: "/pages/my/login" }); //如果不是在同一个文件夹则必须从跟目录书写,如下
uni.switchTab(); //是跳转到tabBar配置的路径的,uni.navigateTo()则不可以;
uni.navigateBack(); //返回上一级
为了书写的规范,统一用uni.navigateTo({
url: "/pages/my/login" });这种方式。
// 在这个周期函数里接受
onLoad: function(option) {
}
{
"path": "pages/home/home",
"style": {
"navigationBarTitleText": "首页",
"enablePullDownRefresh": true
}
},
注意onPullDownRefresh下拉刷新需要的page.json里配置。
"enablePullDownRefresh": true,
onReachBottom上拉加载。距离底部的50px才会触发。
和scroll-view没有关系。
scroll-view是单独的再页面里一个盒子里内容的滚动标签。
// input 统一封装为组件,这样placeholder-style的样式就不需要在每个页面的计算属性里处理upx;
placeholder-style="color: #ccc;font-size: 14px;"
(作者:爱不会绝记 链接:https://www.jianshu.com/p/9dfa473f7fee。)