使用postcss-rpx2vmin

145 阅读2分钟

为了更好的适配PC端小程序的横屏模式,此外为了避免改造成本过高。我们可以将rpx转为vmin

vmax 相对于视口的宽度或高度中较大的那个。其中最大的那个被均分为100单位的vmax

vmin 相对于视口的宽度或高度中较小的那个。其中最小的那个被均分为100单位的vmin

为了适配PC端的样式,在这里我们只用到了vmin。小程序PC端展示样式就相当于将竖屏改为横屏

当我们在竖屏时候,100vmin的取值为手机屏幕宽度,当横屏时候,100vmin的取值仍然为手机屏幕宽度,所以以vmin为单位的元素,在手机屏幕发生旋转的时候,其显示大小并不会发生改变(毕竟不管横屏竖屏,100vmin都等于屏幕的宽度)。

在使用rpx进行布局时,750rpx的取值为手机屏幕的宽度,而在使用vmin时,100vmin的取值为手机屏幕的宽度,所以,rpx和vmin之间存在一个换算关系,即:x rpx=( x * 100 / 750)vmin。举个例子,75rpx转化为vmin为75 * 100 / 750 = 10 vmin。所以,我们只要将rpx转化成vmin就可以了。

// test.js
const css = `  
  .container {    
    width: 750rpx;    
    height: 400rpx;    
    font-size: 32rpx;  
  }`;
postcss([rpxToVminPlugin()])  
.process(css)  
.then(result => {    
  console.log(result.css);  
});

输出结果

.container {
    width: calc(100vmin);
    height: calc(53.333333333333336vmin);
    font-size: calc(4.266666666666667vmin);
  }

在项目中使用

// npm
npm install postcss-rpx2vmin
// yarn
yarn add postcss-rpx2vmin

在postcss.config.js里使用

const postcss = require('postcss')
const rpx2vmin = require('postcss-rpx2vmin')
module.exports = {  
   plugins: [    
     require('postcss')(),    
     require('rpx2vmin')(), // 引用插件并调用  
   ],
};

上述方案只是一种临时解决方案,部分页面布局还需要单独细化调整

如果是一个新项目可以参考官网的page-meta

developers.weixin.qq.com/miniprogram…

从开始做的时候就考虑适配问题