vue+ vant + lib-flexible +postcss-pxtorem 实现移动端页面自适应

vue+ vant + lib-flexible +postcss-pxtorem 实现移动端页面自适应

版本:vue cli2脚手架

lib-flexible

1.安装

npm install amfe-flexible --save

2.引入

main.js中:

import 'amfe-flexible'

index.html中:


==验证==:切换不同的手机尺寸看控制台html的字体会不会发生变化


postcss-pxtorem

1.安装

npm install postcss-pxtorem --save-dev

==踩坑1:==
直接采取上述命令可能会报错 说vant/lib/...有问题 其实并不是vant的错 搜了资料之后发现可能是该依赖包的版本有问题 安装了指定的5.0版本之后就好了

npm install [email protected] -D

==踩坑2:==
不知何原因 安装此依赖包之后,对body设置font-size字体大小无效
解决:

body {
  background: #fff;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
*{
  font-size:16px;
  font-family: Arial;
}

2.修改.postcssrc.js(如果没有此文件的话在根路径下创建)

module.exports = {
  // "plugins": {
  //   "postcss-import": {},
  //   "postcss-url": {},
  //   // to edit target browsers: use "browserslist" field in package.json
  //   "autoprefixer": {}
  // }
  plugins: {
    'autoprefixer': {
      browsers: ['Android >= 4.0', 'iOS >= 8']
    },
    //设计稿是750的 按理说应该是75 但是引用的vant库尺寸是以375px为标准的
    // 这样写样式的时候只需要把设计稿/2写px即可
    'postcss-pxtorem': {
      rootValue: 37.5,
      propList: ['*']
    }
  }
}
大多数设计稿的原型都是以 iphone6 为原型,iphone6 设备的宽是 750
但是 Vant 建议设置为 37.5,为什么呢?
因为 Vant 是基于 375 写的,所以如果你设置为 75 的话,Vant 的样式就小了一半。
所以如果设置为 37.5 的话,Vant 的样式是没有问题的,但是我们在测量设计稿的时候都必须除2才能使用,否则就会变得很大。

以上那样做其实也没有问题,但是我们可以这样做:
- 如果是 Vant 的样式,就把 rootValue 设置为 37.5 来转换
- 如果是我们的样式,就按照 75 的 rootValue 来转换

通过查阅文档我们可以看到 rootValue 支持两种参数类型:
- 数字:固定值
- 函数:动态计算返回
  - postcss-pxtorem 处理每个 CSS 文件的时候都会来调用这个函数
  - 它会把被处理的 CSS 文件相关的信息通过参数传递给该函数

所以我们修改配置如下:
'postcss-pxtorem': {
      rootValue ({ file }) {
        return file.indexOf('vant') !== -1 ? 37.5 : 75
      },
      propList: ['*']
      // exclude 这个属性可以配置不需要转换的资源 直接写文件名就行,不需要后缀
      // exclude: 'github-markdown'
    }

以上两种方案都行 看自己喜欢哪种了

3.注意事项:

1.如果部分设计样式不想转换为rem,可以将 px 改为 ==PX== ,就不会对该数值进行转换了,但是这一点在 calc 计算属性中是 不生效的,开发模式下没有问题,但是打包时会出现编译错误(截至postcss-pxtorem 4.0.1版本哈,后续也许作者会修复这个问题),这个时候需要配合 selectorBlackList 来设置一个class来取消px的转换。

2.==该插件不能转换行内样式中的 px==,例如 :

不会被转换成rem

==一般border不需要转换成rem==

  border:1PX solid red; 

你可能感兴趣的:(vue+ vant + lib-flexible +postcss-pxtorem 实现移动端页面自适应)