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宝典学习笔记(上)
Jan 10 Javascript
用javascript动态调整iframe高度的代码
Apr 10 Javascript
基于JQuery的Select选择框的华丽变身
Aug 23 Javascript
JQuery的AJAX实现文件下载的小例子
May 15 Javascript
javascript实现点击商品列表checkbox实时统计金额的方法
May 15 Javascript
Bootstrap选项卡学习笔记分享
Feb 13 Javascript
PHP实现本地图片上传和验证功能
Feb 27 Javascript
AngularJS中table表格基本操作示例
Oct 10 Javascript
详解开发react应用最好用的脚手架 create-react-app
Apr 24 Javascript
vue 组件中添加样式不生效的解决方法
Jul 06 Javascript
微信小程序自定义带价格显示日历效果
Dec 29 Javascript
VUE使用axios调用后台API接口的方法
Aug 03 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递归复制、移动目录的自定义函数分享
2014/11/18 PHP
js 分栏效果实现代码
2009/08/29 Javascript
小议javascript 设计模式 推荐
2009/10/28 Javascript
javascript正则表达式总结
2016/02/29 Javascript
浅谈javascript运算符——条件,逗号,赋值,()和void运算符
2016/07/15 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
JavaScript数组_动力节点Java学院整理
2017/06/26 Javascript
详解angular笔记路由之angular-router
2017/09/12 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
vue实现配置全局访问路径头(axios)
2019/11/01 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
几个提升Python运行效率的方法之间的对比
2015/04/03 Python
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
Python下载网络文本数据到本地内存的四种实现方法示例
2018/02/05 Python
python中的json总结
2018/10/11 Python
python3实现名片管理系统
2020/11/29 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python函数和模块的使用总结
2019/05/20 Python
Python tornado上传文件的功能
2020/03/26 Python
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
毕业生个人投资创业计划书
2014/01/04 职场文书
班级聚会策划书
2014/01/16 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
2014年前台文员工作总结
2014/12/08 职场文书
工作自我推荐信范文
2015/03/25 职场文书
2015年绩效考核工作总结
2015/05/23 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js
Java版 单机五子棋
2022/05/04 Java/Android