介绍
postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem
lib-flexible 用于设置 rem 基准值

1、安装lib-flexible(用于设置 rem 基准值)

npm i -S amfe-flexible

2、在main.js文件中引入lib-flexible

import 'amfe-flexible'

3、安装postcss-pxtorem(postcss-pxtorem是一款 postcss 插件,用于将单位转化为 rem)

npm install postcss-pxtorem --save-dev

4、在public/index.html加入meta标签

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no">

5、项目配置postcss,有两种方式(注意package.json 和 vue.config.js只选一种配置即可,不要同时配置)

(1)、在package.json中配置

"postcss": {
"plugins": {
"autoprefixer": {},
"postcss-pxtorem": {
"rootValue": 37.5,
"propList": [ "*"]
} } }

(2)、在vue.config.js中配置

const autoprefixer = require('autoprefixer');
const pxtorem = require('postcss-pxtorem'); module.exports = {
css: {
loaderOptions: {
postcss: {
plugins: [
autoprefixer(),
pxtorem({
rootValue: 37.5,
propList: ['*']
})
]
}
}
}
};

这样就完成了适配,需要注意的是,css里面我们就只需要写px,然后会自动转换成rem在浏览器显示,rootValue设置为37.5,之所以设为37.5,是为了引用像vant这样的第三方UI框架,因为第三方框架没有兼容rem,用的是px单位,将rootValue的值设置为设计图宽度(这里为750px)75的一半,即可以1:1还原vant、mint-ui的组件,否则会样式会有变化,例如按钮会变小。既然设置成了37.5 那么我们必须在写样式时,也将值改为设计图(设计图的宽为750px)的一半。

由于在写样式的时候将所有的大小都改成一半这样写起来不方便,所以通常在设置rootValue的时候更多人愿意将其设置为75,这样就可以按设计稿的大小来写样式了,设计稿设计出来是多少像素,写样式的时候就写成多样式。可以这样的话对于vant、mint-ui等第三方框架的组件,他们渲染出来就会出现变小的情况,因为他们是基于375设计的。下面提供了两种方法解决这种第三方框架的组件出现缩小的问题,下面均以vant-ui为例:

1、在配置中设置排除vant-ui相关的组件,让该框架的组件不转为rem,这样的话框架的组件是px作为单位均不自适应了。(这种方式个人不怎么建议)

这里以vue.config.js中的配置为例(package.json的配置类似)

const autoprefixer = require('autoprefixer');
const pxtorem = require('postcss-pxtorem'); module.exports = {
css: {
loaderOptions: {
postcss: {
plugins: [
autoprefixer(),
pxtorem({
rootValue: 75,
propList: ['*'],
"selectorBlackList":["van-"] //排除vant框架相关组件
})
]
}
}
}
};

2、动态设置rootValue的大小,即对于vant-ui框架的组件 将rootValue设置成37.5,对于我们自己的750宽度的设计稿的将rootValue设置成75。这样就可以达到所有的均可自适应了

在根目录下新建postcss.config.js文件,同时将vue.config.js 及 package.json文件中的postcss的配置删除。然后在postcss.config.js文字中添加入下内容:

const autoprefixer = require('autoprefixer');
const pxtorem = require('postcss-pxtorem');
module.exports = ({ file }) => {
let remUnit
if (file && file.dirname && file.dirname.indexOf('vant') > -1) {
remUnit = 37.5
} else {
remUnit = 75
}
return {
plugins: [
autoprefixer(),
pxtorem({
rootValue: remUnit,
propList: ['*'],
selectorBlackList: ['van-circle__layer']
})
]
}
}  

好了,到目前为止就算解决了 第三方框架的组件出现缩小  的问题。

最后啰嗦一句:由于viewport单位得到众多浏览器的兼容,lib-flexible这个过渡方案已经可以放弃使用,不管是现在的版本还是以前的版本,都存有一定的问题。建议大家开始使用viewport来替代此方案

  

  

  

  

  

  

移动端Rem适配(基于vue-cli3 ,ui框架用的是vant-ui)的更多相关文章

  1. 谈谈我的移动端rem适配方案

    最近有点怀疑人生,毕竟一个人写前端,有时候会怀疑自己理解的一些东西包括用法有没有符合标准.趁着这阵子闲下来,翻了翻别人的rem适配博客,发现有点绕口,怪自己是个强迫症,啥都要自己去试试结果并从中理解, ...

  2. 07. 如何实现移动端rem适配

    如何实现移动端rem适配 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...

  3. 基于vue的nuxt框架cnode社区服务端渲染

    nuxt-cnode 基于vue的nuxt框架仿的cnode社区服务端渲染,主要是为了seo优化以及首屏加载速度 线上地址 http://nuxt-cnode.foreversnsd.cngithub ...

  4. 移动端rem适配&iOS兼容

    移动端rem适配js // 默认375,750设计稿请将375替换为750 (function (doc, win) { // 移动端适配 var docEl = doc.documentElemen ...

  5. H5 端 rem 适配方案与 viewport 适配

    H5 端 rem 适配方案与 viewport 适配 rem rem 是 CSS3 新增的一个相对单位(root em,根 em) 只根据当前页面 HTML 页面的 font-size 设置,如果根目 ...

  6. 国产 WEB UI 框架 (收费)-- Quick UI,Mini UI

    国产 WEB UI 框架 (收费)-- Quick UI,Mini UI : http://www.uileader.com/ http://www.miniui.com/

  7. vue中使用第三方UI库的移动端rem适配方案

    需求:使用vue-cli脚手架搭建项目,并且使用第三方的UI库(比如vant,mint ui)的时候,因为第三方库用的都是用px单位,无法使用rem适配不同设备的屏幕. 解决办法:使用px2rem-l ...

  8. 移动端 rem适配方法

    rem适配 一, 网易适配方法         屏幕宽度/设计稿rem宽度=页面动态font-size值(如:375/7.5=50)         document.documentElement. ...

  9. H5移动端rem适配

    /** * 移动端自适应 */ <meta name="viewport" content="width=device-width,user-scalable=no ...

随机推荐

  1. 合并cookie,提取json数据

    发送的第3个请求需要前两个请求的cookie,需要对cookie进行合并 发送的请求数据来自于json数据中的某个键值. 这里是删除所有的对话主题目录,每一个目录有一个id,发起删除对话主题目录的请求 ...

  2. LINQ之路 7:子查询、创建策略和数据转换(要点笔记)

    匿名类型 上面我们自己定义了类型TempProjectionItem来存放查询的结果.通过使用匿名类型,我们可以省去这种中间类型的定义,而由编译器来帮我们完成: select item.Origina ...

  3. from PIL import image报错

    python中import PIL可以,但是from PIL import Image就报错? ’‘ 大家在安装pillow的时候,可能会安装成功,但是当运行from pIL import image ...

  4. js对象或数组深复制

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 【XP系统下载U盘装系统】用电脑店超级U盘装XP系统详细图文教程

    现在U盘装系统已经越来越流行了,不仅方便而且简单,由于U盘启动盘用的制作工具不同,其中比较流行的有老毛桃.电脑店.大白菜.一键U盘装系统等等,因此安装过程中也有不尽相同的,今天就和大家分享下利用电脑店 ...

  6. IP地址0.0.0.0表示什么

    参考RFC文档: 0.0.0.0/8 - Addresses in this block refer to source hosts on "this"network. Addre ...

  7. IBM Developer:Java 9 新特性概述

    Author: 成富 Date: Dec 28, 2017 Category: IBM-Developer (20) Tags: Java (27) 原文地址:https://www.ibm.com/ ...

  8. OSX安装Mysql8.0

    OSX下MySQL的安装非常方便,可以通过官网的dmg包进行安装,也可通过brew进行安装.以下介绍如何通过brew如何安装MySQL. 0X00.安装前的准备 既然要通过brew安装,那么就需要确保 ...

  9. Tp5安全篇入门

    输入安全 设置public目录为唯一对外访问目录,不能把资源文件放入到应用目录: 使用框架提供的请求变量获取方法(Request类的param方法及input助手函数)而不是原生系统变量获取用户输入的 ...

  10. 没有admin权限如何免安装使用Node和NPM

    此教程只针对于在windows系统上没有admin权限和软件安装权限,但是又希望能像安装版一样使用Node和NPM的用户. 步骤一: 下载压缩版node 访问https://nodejs.org/en ...