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 相关文章推荐
共享自己写一个框架DreamScript
Jan 20 Javascript
Jquery常用技巧收集整理篇
Nov 14 Javascript
根据身份证号自动输出相关信息(籍贯,出身日期,性别)
Nov 15 Javascript
JavaScript jquery及AJAX小结
Jan 24 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 Javascript
利用jQuery实现简单的拖曳效果实例代码
Oct 20 jQuery
Vue中对iframe实现keep alive无刷新的方法
Jul 23 Javascript
使用layui定义一个模块并使用的例子
Sep 14 Javascript
Vue开发环境跨域访问问题
Jan 22 Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 Javascript
封装 axios+promise通用请求函数操作
Aug 11 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
dede3.1分页文字采集过滤规则详说(图文教程)续二
2007/04/03 PHP
PHP 基于文件头的文件类型验证类函数
2012/05/01 PHP
php 定义404页面的实现代码
2012/11/19 PHP
PHP中4个加速、缓存扩展的区别和选用建议
2014/03/12 PHP
PHP实现的装箱算法示例
2018/06/23 PHP
Mootools 1.2教程 Fx.Tween的使用
2009/09/15 Javascript
javascript下arguments,caller,callee,call,apply示例及理解
2009/12/24 Javascript
jquery构造器的实现代码小结
2011/05/16 Javascript
利用jQuery实现可输入搜索文字的下拉框
2013/10/23 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
2014/06/23 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
js+CSS实现弹出居中背景半透明div层的方法
2015/02/26 Javascript
javascript实现下雪效果【实例代码】
2016/05/03 Javascript
vue实现百度搜索下拉提示功能实例
2017/06/14 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
2018/02/27 jQuery
4个顶级开源JavaScript图表库
2018/09/29 Javascript
JavaScript switch语句使用方法简介
2019/12/30 Javascript
vue 使用v-for进行循环的实例代码详解
2020/02/19 Javascript
three.js中多线程的使用及性能测试详解
2021/01/07 Javascript
[40:01]OG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python中用format函数格式化字符串的用法
2015/04/08 Python
Python中的ctime()方法使用教程
2015/05/22 Python
Django视图之ORM数据库查询操作API的实例
2017/10/27 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
Python3.7实现验证码登录方式代码实例
2020/02/14 Python
使用pyecharts1.7进行简单的可视化大全
2020/05/17 Python
解决阿里云邮件发送不能使用25端口问题
2020/08/07 Python
python关于倒排列的知识点总结
2020/10/13 Python
htmlentities() 和 htmlspecialchars()有什么区别
2015/07/01 面试题
vue路由实现登录拦截
2021/03/24 Vue.js
优秀共产党员推荐材料
2014/12/18 职场文书
2016新教师岗前培训心得体会
2016/01/08 职场文书
tensorflow中的数据类型dtype用法说明
2021/05/26 Python