移动端页面适配

搜索引擎热搜适配方案—rem适配:

工具:

1.amfe-flexible(原淘宝使用的可伸缩布局方案)

2.postcss-pxtorem(postcss的插件,用于将像素单元生成rem单位)

安装:

  • 可以直接下载amfe-flexible到public文件夹下(样例中使用这种),或者npm i -S amfe-flexible
  • 引入
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
<script src="/amfe-flexible.js"></script>
  • npm install postcss-pxtorem --save
  • 同时需要安装, postcss和postcss-loader

注意postcss-pxtorem最新版本会报错,需要postcss8.0支持,然后postcss-loader最新版本会报错,兼容性问题。

所以最后选用

"postcss": "^8.4.12",
"postcss-loader": "3.0.0",
"postcss-pxtorem": "5.0.0",
  • 在vue.config.js配置如下:
module.exports = {
    //...其他配置
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-pxtorem')({
                        rootValue: 37.5,
                        propList: ['*']
                    })
                ]
            }
        }
    },
}
  • 在postcssrc.js或postcss.config.js中配置如下:
module.exports = {
    "plugins": {
        'postcss-pxtorem': {
            rootValue: 37.5,
            propList: ['*']
        }
    }
}
  • rootValue根据设计稿宽度除以10进行设置,这边假设设计稿为375,即rootValue设为37.5;
  • propList是设置需要转换的属性,这边*为所有都进行转换。

测试结果:

  • UC浏览器中,适配存在严重的问题,甚至页面没有百分比铺满(微信打开无此情况),应该是amfe-flexible出了问题。
  • Chrome测试中,少量地方,存在适配不足的情况

最后选择弃用!

适配方案—viewport

工具:

postcss-px-to-viewport

安装:

npm install postcss-px-to-viewport --save-dev

配置:

  • 在vue.config.js配置如下:
module.exports = {
    //...其他配置
    css: {
        loaderOptions: {
            postcss: {
                plugins: [
                    require('postcss-px-to-viewport')({
                        viewportWidth: 375,
                    })
                ]
            }
        }
    },
}
  • 在postcssrc.js或postcss.config.js中配置如下:
module.exports = {
  plugins: {
    'postcss-px-to-viewport': {
      viewportWidth: 375,
    },
  },
};

测试结果:

  • Chrome,UC,微信浏览器中,均有良好的适配性
  • 标签属性无法转换,例如img标签直接使用width和height标签是无法转换的
  • style属性也无法转换