1.下载lib-flexible

npm i lib-flexible --save
或
yarn add lib-flexible

2.在项目中引入lib-flexible 一般情况在(main.js中引入lib-flexible)

import 'lib-flexible/flexible'

3.设置meta标签(视情况而定)

<meta name="viewport" content="width=device-width, initial-scale=1.0">

4.安装px2rem-loader

npm install px2rem-loader   --save
或
yarn add px2rem-loader

5.在webpack中配置px2rem-loader

1,在项目build文件中找到util.js,将px2rem-loader添加到cssLoaders中,
2,px2rem-loader 下的 remUnit 根据设计稿而定
具体如下:

exports.cssLoaders = function (options) {options = options || {}const cssLoader = {loader: 'css-loader',options: {minimize: process.env.NODE_ENV === 'production',sourceMap: options.sourceMap}}//rem编译(新加px2)const px2remLoader = {loader: 'px2rem-loader',options: {remUnit: 75 // 由于设计稿是750}}function generateLoaders (loader, loaderOptions) {var loaders = [cssLoader,px2remLoader]//添加到loader里面省略.....}
}

6.项目中使用

假设设计稿width和font-size分别是200px,50px
具体代码:(按照设计稿写即可)

.demo{width: 200px;font-size: 50px;
}

7.单独使用flexible可直接添加一个rem.js文件,具体如下:

1,配合less,sass和stylus来做px转换rem
2,具体可参看css编译

/*
** 移动端自适应方案  FROM 手淘
*/
export const setViewport = (()=>{//此处是单独使用const win = windowconst lib = window.lib || (window.lib = {})
//;(function(win, lib) {//此处是直接使用let doc = win.document;let docEl = doc.documentElement;let metaEl = doc.querySelector('meta[name="viewport"]');let flexibleEl = doc.querySelector('meta[name="flexible"]');let dpr = 0;let scale = 0;let tid;let flexible = lib.flexible || (lib.flexible = {});if (metaEl) {//console.warn('将根据已有的meta标签来设置缩放比例');let match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/);if (match) {scale = parseFloat(match[1]);dpr = parseInt(1 / scale);}} else if (flexibleEl) {let content = flexibleEl.getAttribute('content');if (content) {let initialDpr = content.match(/initial\-dpr=([\d\.]+)/);let maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/);if (initialDpr) {dpr = parseFloat(initialDpr[1]);scale = parseFloat((1 / dpr).toFixed(2));}if (maximumDpr) {dpr = parseFloat(maximumDpr[1]);scale = parseFloat((1 / dpr).toFixed(2));}}}if (!dpr && !scale) {//let isAndroid = win.navigator.appVersion.match(/android/gi);let isIPhone = win.navigator.appVersion.match(/iphone/gi);let devicePixelRatio = win.devicePixelRatio;if (isIPhone) {// iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) {                dpr = 3;} else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){dpr = 2;} else {dpr = 1;}} else {// 其他设备下,仍旧使用1倍的方案dpr = 1;}scale = 1 / dpr;}docEl.setAttribute('data-dpr', dpr);if (!metaEl) {metaEl = doc.createElement('meta');metaEl.setAttribute('name', 'viewport');metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no');if (docEl.firstElementChild) {docEl.firstElementChild.appendChild(metaEl);} else {let wrap = doc.createElement('div');wrap.appendChild(metaEl);doc.write(wrap.innerHTML);}}function refreshRem(){let width = docEl.getBoundingClientRect().width;if (width / dpr > 540) {width = 540 * dpr;}let rem = width / 10;docEl.style.fontSize = rem + 'px';flexible.rem = win.rem = rem;}win.addEventListener('resize', function() {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}, false);win.addEventListener('pageshow', function(e) {if (e.persisted) {clearTimeout(tid);tid = setTimeout(refreshRem, 300);}}, false);if (doc.readyState === 'complete') {doc.body.style.fontSize = 12 * dpr + 'px';} else {doc.addEventListener('DOMContentLoaded', function() {doc.body.style.fontSize = 12 * dpr + 'px';}, false);}refreshRem();flexible.dpr = win.dpr = dpr;flexible.refreshRem = refreshRem;flexible.rem2px = function(d) {let val = parseFloat(d) * this.rem;if (typeof d === 'string' && d.match(/rem$/)) {val += 'px';}return val;};flexible.px2rem = function(d) {let val = parseFloat(d) / this.rem;if (typeof d === 'string' && d.match(/px$/)) {val += 'rem';}return val;};});
//})(window, window.lib || (window.lib = {}));

说说vue-cli中使用flexible和px2rem-loader相关推荐

  1. Leaflet笔记-把leaflet-tilelayer-wmts移植到vue cli中(含思路)

    目录 前言 过程 前言 关于leaflet的webpackage使用npm安装官方是有明显的解析 但是关于插件特别是TileLayer.WMTS是不提供的,但提供了源码,可以稍微修改下,就能在vue ...

  2. 前端笔记-vue cli中axios批量发送get和post请求及注意事项

    目录 基本概念 关键代码 基本概念 这里安装好axios后,还要安装qs npm install --save qs 在vue cli中在created里面调用方法,他会在页面加载完成后自动调用! 批 ...

  3. 在 vue/cli 中使用 Module Federation

    webpack5 的新特性,分模块共同开发.多个独立的构建可以组成一个应用程序,这些独立的构建之间不应该存在依赖关系,因此可以单独开发和部署它们.这通常被称作微前端,但并不仅限于此. 我们分为本地模块 ...

  4. scss 是什么?在 Vue.cli 中的安装使用步骤是?有哪几大特性?(gxcw)

    首先什么是scss呢? scss是一种css预处理语言,是一个css的扩展,它在css语法的基础上,允许使用变量,嵌套规则,混合,导入,继承等功能,使得css更加强大和优雅,而且其完全兼容css3. ...

  5. Vue Cli 中使用 jQuery

    Vue Cli 中使用 jQuery 方式一: 1.安装 jquery npm install jquery 2.在想要使用 jQuery 的文件里面引入即可: import $ from 'jque ...

  6. Web前端笔记-js中加载图片文件(vue cli中同样适用)

    这里主要是在vue cli项目中加载图片的时候会出现304,特别是使用自己写的js加载图片的时候,此博文记录了解决办法. 在js文件中引用文件 import img from '@/assets/im ...

  7. 前端笔记-vue cli中使用router-link进行路由跳转

    目录 以前的方法 新方法 以前的方法 以前是通过router的push进行跳转,代码如下: <template><div class="XXXXXXXXXXXXXXXXX& ...

  8. 前端笔记-Vue cli中使用axios后JavaScript变量传输给vue变量要注意的地方

    目录 axios.all中的注意事项 为什么要采用全局的JavaScript变量给vue变量 axios.all中的注意事项 如下的请求: methods:{getData(){axios.all([ ...

  9. 前端笔记-vue cli中使用echarts画江苏省地图

    目录 基本概念 代码与实例 基本概念 这里使用echarts,框架用vue cli,下面这个链接是vue cli导入echarts https://blog.csdn.net/qq78442761/a ...

  10. 【vue】在vue,vue cli中拼接字符串,拼接图片链接

    以往拼接字符串一般用"+"或者".",但是在vue中可以使用过滤器的方式 当json数据中的图片链接是相对路径时,需要为它拼接出绝对路径 如下: dataEle ...

最新文章

  1. 重磅:Swagger3.0 官方 starter 诞生了,其它的都可以扔了~
  2. 乐理 music theory
  3. wget: unable to resolve host address “http”
  4. MQ 之 RocketMQ
  5. android三星note20.6,再次力压华为Mate20 Pro, 三星Note9评选为2018年最佳安
  6. 数据工作者的福音:Google 发布正式版数据搜索工具啦!
  7. Aiseesoft Data Recovery从硬盘驱动器恢复丢失的数据的方法
  8. MySQL不能插入中文字段的解决办法
  9. android 快速开发(二)辅助类的使用,kotlin枚举类反射
  10. 【locust】locust与jmeter性能对比
  11. 已解决:Navicat 1046 - UDAL - No database selected
  12. java时间戳与LocalDateTime常用转换方式
  13. linux 进入recovery模式,ubuntu进入recovery mode模式 – 运维那些事
  14. 为特斯拉车主构思设计的一款刹车踩踏数据监测器
  15. 手把手教你如何使用Multisim对Digilent FPGA开发板进行编程
  16. 【在表格下方创建“添加”按钮,完成添加用户信息,点击后自动添加等功能】
  17. C++实现邮件群发的方法
  18. 【转】函数式编程另类指南
  19. cap数据包文件解析
  20. matlab与amesim匹配,AMESim-MATLAB联合仿真详细设置+部分问题解决步骤

热门文章

  1. python常用模块②
  2. javascript高级程序设计第二章知识点提炼
  3. obs中音频和视频的同步
  4. 优化UITableViewCell高度计算的那些事
  5. 常用工具下载及在线地址
  6. 【Flutter】微信项目实战【05】 通讯录界面搭建(上)
  7. CSS按钮动画(五)
  8. 2017年——秋招面试总结(网宿、美图)
  9. C语言项目2:图书管理系统
  10. Linux IO系统分析(scsi篇)