vue做移动端适配最佳解决方案(亲测有效)


Posted in Javascript onSeptember 04, 2018

vw 解决方案

1. 安装并配置PostCss插件

npm i postcss-aspect-ratio-mini postcss-px-to-viewport postcss-write-svg postcss-cssnext postcss-viewport-units cssnano --S

2. 对 PostCss 进行配置

找到在根目录中的.postcssrc.js,对PostCSS插件进行配置

module.exports = {
 "plugins": {
  "postcss-import": {},
  "postcss-url": {},
  // to edit target browsers: use "browserslist" field in package.json
  "postcss-write-svg": {
   uft8: false
  },
  "postcss-cssnext": {},
  "postcss-px-to-viewport": {
   viewportWidth: 750, // 视窗的宽度,对应的是我们设计稿的宽度,一般是750
   viewportHeight: 1334, // 视窗的高度,根据750设备的宽度来指定,一般指定1334,也可以不配置
   unitPrecision: 3, // 指定`px`转换为视窗单位值的小数位数(很多时候无法整除)
   viewportUnit: 'vw', // 指定需要转换成的视窗单位,建议使用vw
   selectorBlackList: ['.ignore', '.hairlines'], // 指定不转换为视窗单位的类,可以自定义,可以无限添加,建议定义一至两个通用的类名
   minPixelValue: 1, // 小于或等于`1px`不转换为视窗单位,你也可以设置为你想要的值
   mediaQuery: false // 允许在媒体查询中转换`px`
  },
  "postcss-viewport-units": {},
  "cssnano": {
   preset: "advanced",
   autoprefixer: false, // 和cssnext同样具有autoprefixer,保留一个
   "postcss-zindex": false
  }
 }
}

3. 引入viewport-units-buggyfill解决兼容问题

在 index.html 中引入js

<script src="//g.alicdn.com/fdilab/lib3rd/viewport-units-buggyfill/0.6.2/??viewport-units-buggyfill.hacks.min.js,viewport-units-buggyfill.min.js"></script>
<script>
 window.onload = function () { 
  window.viewportUnitsBuggyfill.init({ hacks: window.viewportUnitsBuggyfillHacks });
 }
</script>

最近在做商城的项目,发现有赞的ui非常适合,但有一个问题是有赞的ui用的单位是px,做不了移动端的适配,官网的提供的vw适配方案发现不可行,最后还是决定rem来做适配,上网搜了一下,发现了一套可用方案,亲测有效哦

它的原理是借助px2rem 插件方便的将px单位转为了rem

具体步骤:

安装

npm install px2rem-loader lib-flexible --save

在main.js中引入lib-flexible

import 'lib-flexible/flexible.js'

在build下的 utils.js中,找到generateLoaders 方法,添加以下代码

const px2remLoader = {
  loader: 'px2rem-loader',
  options: {
  remUnit: 37.5
  }
}
 
function generateLoaders (loader, loaderOptions) {
  const loaders = [cssLoader, px2remLoader]
  if (loader) {
    loaders.push({
    loader: loader + '-loader',
    options: Object.assign({}, loaderOptions, {
    sourceMap: options.sourceMap
    })
  })
}

重启项目,会发现自己设置的px被转为rem 了

但是有一定的局限性

以上实现转换适用于:

(1)组件中编写的<style></style>下的css

(2)从index.js或者main.js中import ‘../../static/css/reset.css'引入css

(3)在组件的<script type=”text/ecmascript-6″> import ‘../../static/css/reset.css'</script>中引入css

另外的情况不适用:

(1)组件<style></style>中@import “../../static/css/reset.css (可考虑上面(2)、(3)的形式引入)

(2)外部样式:<link rel=”stylesheet” href=”static/css/reset.css”>

(3)元素内部样式:style=”height: 417px; width: 550px;”

另外我要补充的是:在做移动端适配的时候我们不建议给字体也设置rem的单位,针对这种情况,我为字体适配的解决方案是使用媒体查询,文件以组件<style></style>中@import “../../static/css/reset.css形式引入,可完美解决移动端适配问题

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js中if语句的几种优化代码写法
Mar 12 Javascript
使用简洁的jQuery方法实现隔行换色功能
Jan 02 Javascript
JavaScript弹出窗口方法汇总
Aug 12 Javascript
24款热门实用的jQuery插件推荐
Dec 24 Javascript
不能不知道的10个angularjs英文学习网站
Mar 23 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
JS实现图片垂直居中显示小结
Dec 13 Javascript
js实现按座位号抽奖
Apr 05 Javascript
Vue中正确使用jQuery的方法
Oct 30 jQuery
简单实现vue中的依赖收集与响应的方法
Feb 18 Javascript
js中数组常用方法总结(推荐)
Apr 09 Javascript
jQuery Datatables 动态列+跨列合并实现代码
Jan 30 jQuery
基于element-ui的rules中正则表达式
Sep 04 #Javascript
微信小程序的部署方法步骤
Sep 04 #Javascript
vue2中使用sass并配置全局的sass样式变量的方法
Sep 04 #Javascript
Element UI 自定义正则表达式验证方法
Sep 04 #Javascript
在vue项目中引入高德地图及其UI组件的方法
Sep 04 #Javascript
使用validate.js实现表单数据提交前的验证方法
Sep 04 #Javascript
快速解决vue-cli在ie9+中无效的问题
Sep 04 #Javascript
You might like
php采集时被封ip的解决方法
2010/08/29 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
PHP 接入微信扫码支付总结(总结篇)
2016/11/03 PHP
JavaScrip单线程引擎工作原理分析
2010/09/04 Javascript
JS+CSS实现弹出全屏灰黑色透明遮罩效果的方法
2014/12/20 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
浅谈时钟的生成(js手写简洁代码)
2016/08/20 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
AngularJS点击添加样式、点击变色设置的实例代码
2017/07/27 Javascript
ReactJs实现树形结构的数据显示的组件的示例
2017/08/18 Javascript
原生JavaScript实现的简单放大镜效果示例
2018/02/07 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
angularJs自定义过滤器实现手机号信息隐藏的方法
2018/10/08 Javascript
Vue基于vuex、axios拦截器实现loading效果及axios的安装配置
2019/04/26 Javascript
python登录QQ邮箱发信的实现代码
2013/02/10 Python
在Python编程过程中用单元测试法调试代码的介绍
2015/04/02 Python
Python xlrd读取excel日期类型的2种方法
2015/04/28 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
Python编写Windows Service服务程序
2018/01/04 Python
tornado 多进程模式解析
2018/01/15 Python
在NumPy中创建空数组/矩阵的方法
2018/06/15 Python
在matplotlib的图中设置中文标签的方法
2018/12/13 Python
pycharm访问mysql数据库的方法步骤
2019/06/18 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Tensorflow之梯度裁剪的实现示例
2020/03/08 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
用python写一个带有gui界面的密码生成器
2020/11/06 Python
如何基于Python pygame实现动画跑马灯
2020/11/18 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
高中校园广播稿
2014/01/11 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
解决Pytorch中关于model.eval的问题
2021/05/22 Python
Python利用folium实现地图可视化
2021/05/23 Python
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫
Ruby GDBM操作简介及数据存储原理
2022/04/19 Ruby