在vue移动端项目开发中,按照UI设计图尺寸开发并且需要进行各屏幕的适配时,我们单独使用rem,vm,vh时极度不方便,所以笔者经过探索,调试,参考。总结出两种统一适配的方式:1.px转rem进行屏幕适配;2.px转viewport(vm,vh)进行屏幕适配
- px转rem进行屏幕适配
1.首先需要在vue工程中进行安装(安装之后,运行程序时可能会出现报错,笔者遇到的是版本问题,所以就安装了指定的版本)
lib-flexible主要用于屏幕适配,而postcss-pxtorem主要用于单位转换(即将px转为rem);
lib-flexible是淘宝项目组开发出来的一个小插件,属于开源项目,它会自动在html的head中添加一个
meta name="viewport"
的标签,同时会自动设置html的font-size为屏幕宽度除以10,也就是1rem等于html根节点的font-size。假如设计稿的宽度是750px,此时1rem应该等于75px;postcss-pxtorem则是PostCss(一款使用插件去转换CSS的工具)中的一个插件。
npm install lib-flexible@0.3.2 postcss-pxtorem@5.1.1 --save-dev
2.安装完成之后,在vue-cli工程中进行使用
lib-flexible的使用比较简单
// main.js引用即可
import Vue from 'vue'
import App from './App.vue'
import 'lib-flexible' //直接引用
Vue.config.productionTip = false
new Vue({
render: h => h(App),
}).$mount('#app')
postcss-pxtorem有两种引用方式
/*
* 第一种引用方式
* 在vue.config.js文件中引用
*/
module.exports={
css:{
postcss:{
plugins:[
require('postcss-pxtorem')({
rootValue:10, //即为转换基数 100px --> 10rem
propList:['*'] //输入通配符即可,即所有的css均进行rem转换
})
]
}
}
}
/*
* 第二种引用方式
* 在postcss.config.js文件中引用(如果工程中没有,可在一级目录下自建)
*/
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserlist:['Android >= 4.0','iOS >= 7']
},
"postcss-pxtorem":{
rootValue:10,
propList:['*']
}
}
}
- px 转 vm/vh 进行屏幕适配
1.首先需要在vue工程中进行安装(安装之后,如遇运行出错,可安装指定版本)
postcss-px-to-viewport主要用于单位转换(即将px转为vw/vh);
postcss-px-to-viewport也是PostCss(一款使用插件去转换CSS的工具)中的一个插件。
移动端开发强烈建议使用viewport
npm install postcss-px-to-viewport --save-dev
2.安装完成之后,在工程中进行使用即可(同postcss-pxtorem,使用时的配置不一样)
配置更加详细,根据设计图的尺寸进行视窗的宽度,高度适配即可,建议使用vw单位
/*
* 在postcss.config.js文件中引用(如果工程中没有,可在一级目录下自建)
*/
module.exports = {
plugins: {
autoprefixer: {
overrideBrowserlist:['Android >= 4.0','iOS >= 7']
},
"postcss-px-to-viewport": {
viewportWidth: 750, // 视窗的宽度,对应的是我们设计稿的宽度.
viewportHeight: 1334, // 视窗的高度,对应的是我们设计稿的高度.(也可以不配置)
unitPrecision: 2, // 保留几位小数,指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
viewportUnit: 'vw', // 指定需要转换成的视窗单位,建议使用vw
selectorBlackList: ['tab-bar', 'tab-bar-item','shopping-cart-bottom-bar'], // 指定不需要转换的类
minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位.
mediaQuery: false // 允许在媒体查询中转换`px`
}
}
}
希望笔者的总结可以帮到大家, 谢谢!!!