如何实现vue-cli移动端适配问题 引入lib-flexible

第一部分:项目中引入lib-flexible

一、项目中安装lib-flexible

npm install lib-flexible --save

二、在项目的入口main.js文件中引入lib-flexible

import 'lib-flexible'

第二部分:使用postcss-px2rem自动将css中的px转换成rem

一、安装postcss-px2rem 

npm install postcss-px2rem --save-dev


二、配置px2rem-loader

在vue-cli生成的文件中,找到以下文件 build/utils.js,如下图添加配置

如何实现vue-cli移动端适配问题 引入lib-flexible_第1张图片



如何实现vue-cli移动端适配问题 引入lib-flexible_第2张图片


初始的适配方案就完成了,然后可以直接在css或.vue文件中写已px为单位的样式了,到浏览器会自动转为rem。

因为前期项目安排不是太赶,ui给的设计图也相对简单,所以自己写了按钮组件之类的,适配还挺好,觉得自己棒棒哒~

直到ui的后续设计图出现时间插件,然后就引入了vant的组件库。

放了一个简单的cell组件,npm run serve项目跑起来,发现组件中的样式都变小了,F12看了一下果然组件的样式也都被转换成了rem。

px2rem 用法

安装px2rem后,再使用px上有些不同,大家可以参考px2rem官方介绍,下面简单介绍一下。

直接写px,编译后会直接转化成rem ---- 除开下面两种情况,其他长度用这个

在px后面添加/*no*/,不会转化px,会原样输出。 --- 一般border需用这个

在px后面添加/*px*/,会根据dpr的不同,生成三套代码。---- 一般字体需用这个

示例代码

编译前(自己写的代码)

.selector {

 width: 150px;

 height: 64px; /*px*/

 font-size: 28px; /*px*/

 border: 1px solid#ddd; /*no*/

}

编译后(打包后的代码)

.selector {

 width: 2rem;

 border: 1px solid#ddd;

}

[data-dpr="1"] .selector {

 height: 32px;

 font-size: 14px;

}

[data-dpr="2"] .selector {

 height: 64px;

 font-size: 28px;

}

[data-dpr="3"] .selector {

 height: 96px;

 font-size: 42px;

}

重启项目,就可以愉快的用设计稿上的px了。

注意:坑

不能在index.html的头部加 name 为 viewport 的 meta 标签,flexible会自动为我们添加!

问题

变小的主要原因是第三库 css一依据data-dpr="1"时写的尺寸

这时我们使用的flexible引入时 data-dpr不是一个写死了的,是一个动态的;就导致这个问题

然后就各种查解决方案,网络上给的解决方案一个是改写第三方库的样式,还有一个就是让flexible不编译第三方库的文件(忽略ui组件库的样式文件)。

解决方案一:

将第三方组件的css文件复制出来第三方库的css代码px统一扩大2倍,或者用全局替换将px替换为px/*no*/。我觉的这个方案不太好没有采用,具体操作可以参考以下两篇文章:https://segmentfault.com/a/1190000014575890 和 https://blog.csdn.net/weixin_42464312/article/details/82769805。

解决方案二:

使用postcss-px2rem-exclude,网上好多说用这个方法不起作用,经过一个下午的折腾才发现是使用方法不对,我的错误方法就不跟你们说了,直接来正确的。

首先,需要卸载项目中的postcss-px2rem。

npm  uninstall postcss-px2rem --save-dev

其次,安装postcss-px2rem-exclude

npm  install postcss-px2rem-exclude --save

最后是配置exclude选项,需要注意的是这个配置在vue.config.js中式不起作用的,如图。

如何实现vue-cli移动端适配问题 引入lib-flexible_第3张图片

正确的配置位置是项目根目录下的postcss.config.js文件,如果你的项目没有生成这个独立文件,就需要在你的package.js里设置。

postcss.config.jsmodule.exports= {

  plugins: {

    autoprefixer: {},

    "postcss-px2rem-exclude": {

      remUnit: 75,

      exclude: /node_modules|folder_name/i

    }

  }

};

package.json"postcss": {

    "plugins": {

      "autoprefixer": {},

      "postcss-px2rem-exclude":{

          "remUnit":75,

          "exclude":"/node_modules|floder_name/i"      }

    }

  },

ok,完成。

你可能感兴趣的:(如何实现vue-cli移动端适配问题 引入lib-flexible)