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 相关文章推荐
用jQuery实现检测浏览器及版本的脚本代码
Jan 22 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
Dec 06 Javascript
JS求平均值的小例子
Nov 29 Javascript
Js实现滚动变色的文字效果
Jun 16 Javascript
全面解析Bootstrap中tab(选项卡)的使用方法
Jun 06 Javascript
前端面试题及答案整理(二)
Aug 26 Javascript
微信小程序 页面之间传参实例详解
Jan 13 Javascript
微信小程序实现列表下拉刷新上拉加载
Jul 29 Javascript
完美解决linux下node.js全局模块找不到的情况
May 16 Javascript
vue之将echart封装为组件
Jun 02 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 Javascript
用Vue编写抽象组件的方法
May 06 Javascript
基于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发电子邮件
2006/10/09 PHP
安装APACHE
2007/01/15 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
PHP会话处理的10个函数
2015/08/11 PHP
php通过执行CutyCapt命令实现网页截图的方法
2016/09/30 PHP
Javascript 学习笔记 错误处理
2009/07/30 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
30个让人兴奋的视差滚动(Parallax Scrolling)效果网站
2012/03/04 Javascript
JavaScript高级程序设计(第3版)学习笔记2 js基础语法
2012/10/11 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
javascript实现淡蓝色的鼠标拖动选择框实例
2015/05/09 Javascript
javascript实现网页字符定位的方法
2015/07/14 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
2016/07/24 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
获取今天,昨天,本周,上周,本月,上月时间(实例分享)
2017/01/04 Javascript
BootStrap便签页的简单应用
2017/01/06 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
浅谈webpack打包之后的文件过大的解决方法
2018/03/07 Javascript
详解单页面路由工程使用微信分享及二次分享解决方案
2019/02/22 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
Openlayers绘制聚合标注
2020/09/28 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
python实现进程间通信简单实例
2014/07/23 Python
python如何通过twisted实现数据库异步插入
2018/03/20 Python
对python3 Serial 串口助手的接收读取数据方法详解
2019/06/12 Python
python实现五子棋小程序
2019/06/18 Python
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
售后服务经理岗位职责
2014/02/25 职场文书
机关职员工作检讨书
2014/10/23 职场文书
西岭雪山导游词
2015/02/06 职场文书
红灯733-1型14管5波段半导体收音机
2021/04/22 无线电
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android