前言
使用uniapp做的h5页面,在PC端显示时,发现由于rpx单位计算基准值太大,导致页面排版布局错乱
思路
刚开始发现使用px单位不会导致页面布局混乱,但这对刚开启的项目友好,对已经成型的项目修改成本太高,风险也大,而且px是固定单位,在移动端显然没rpx好使;
今天去官方社区逛了一圈,发现有大神已经提出PC端适配方案了,就几句代码就OK了
1、新建一个pc.js
随便找个地方放着,内部代码如下(变量sw值的设置,你们觉得怎么好看怎么来吧,下面的是我根据我的感觉设置的,适配到8K屏幕了):
(function (){
var u = navigator.userAgent,
w = window.innerWidth;
if (!u.match(/AppleWebKit.*Mobile.*/) || u.indexOf('iPad') > -1) {
var sw = w*576/1920;
window.innerWidth = sw<375?375:sw;
window.onload = function() {
window.innerWidth = w;
}
}
})();
2、在main.js里面引入pc.js
注意,pc.js一定要在App实例引入前引入,不然无效!!!
import '@/static/js/pc'
import Vue from 'vue'
import App from './App'
这样做的好处是刷新页面时,页面之前的栈还在,不会像用iframe那样刷新后就回到首页;
如果PC端要实现 1upx = 1rpx = 1px
,PC.js可以修改成这样
(function (){
var u = navigator.userAgent,
w = window.innerWidth;
if (!u.match(/AppleWebKit.*Mobile.*/) || u.indexOf('iPad') > -1) {
window.innerWidth = 750*(w / 1920);
window.onload = function() {
window.innerWidth = w;
}
}
})();
当然如果你的设计图不是1920,比如是1366,那下面就改成这样window.innerWidth = 750*(w / 1366);
tabbar的适配可以通过下面这种方式来进行进行
html, body, .uni-tabbar, .uni-page-head {
max-width: 1000 rpx;
background-color: white;
margin: 0 auto;
}
评论区