移动端Rem适配(基于vue-cli3 ,ui框架用的是vant-ui)
介绍
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)的更多相关文章
- 谈谈我的移动端rem适配方案
最近有点怀疑人生,毕竟一个人写前端,有时候会怀疑自己理解的一些东西包括用法有没有符合标准.趁着这阵子闲下来,翻了翻别人的rem适配博客,发现有点绕口,怪自己是个强迫症,啥都要自己去试试结果并从中理解, ...
- 07. 如何实现移动端rem适配
如何实现移动端rem适配 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> ...
- 基于vue的nuxt框架cnode社区服务端渲染
nuxt-cnode 基于vue的nuxt框架仿的cnode社区服务端渲染,主要是为了seo优化以及首屏加载速度 线上地址 http://nuxt-cnode.foreversnsd.cngithub ...
- 移动端rem适配&iOS兼容
移动端rem适配js // 默认375,750设计稿请将375替换为750 (function (doc, win) { // 移动端适配 var docEl = doc.documentElemen ...
- H5 端 rem 适配方案与 viewport 适配
H5 端 rem 适配方案与 viewport 适配 rem rem 是 CSS3 新增的一个相对单位(root em,根 em) 只根据当前页面 HTML 页面的 font-size 设置,如果根目 ...
- 国产 WEB UI 框架 (收费)-- Quick UI,Mini UI
国产 WEB UI 框架 (收费)-- Quick UI,Mini UI : http://www.uileader.com/ http://www.miniui.com/
- vue中使用第三方UI库的移动端rem适配方案
需求:使用vue-cli脚手架搭建项目,并且使用第三方的UI库(比如vant,mint ui)的时候,因为第三方库用的都是用px单位,无法使用rem适配不同设备的屏幕. 解决办法:使用px2rem-l ...
- 移动端 rem适配方法
rem适配 一, 网易适配方法 屏幕宽度/设计稿rem宽度=页面动态font-size值(如:375/7.5=50) document.documentElement. ...
- H5移动端rem适配
/** * 移动端自适应 */ <meta name="viewport" content="width=device-width,user-scalable=no ...
随机推荐
- HDU-1403-Longest Common Substring(后缀数组的高度数组运用)
这题要求两个串中的最长相同子串的长度.高度数组可以求一个串中的最长相同子串的长度.所以想到把两个串连起来,但是这样又会产生一些新的串(第一个串的结尾和第二个串的开头组成的)于是在两个串中间放一个'\0 ...
- Java IO: PipedOutputStream
原文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) PipedOutputStream可以往管道里写入读取字节流数据,代码如下: 01 Outp ...
- Hexo快速搭建博客
1. 准备工作 ~ 安装node.js -> npm -> hexo-cli ~ 安装git -> 版本控制工具 2. 更换npm(nodejs package manager)源 ...
- jenkins邮件内容模板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- windows下的tfjs-node安装异常总结
大约有半年没有写博客了,奔波于上海这座魔都之中.险些忘了自己是个有梦想的全栈工程师 书接上回,由于个人非常厌恶python的语法,半年前发现了tensorflow.js这个宝贝(下简称tfjs),喜出 ...
- haproxy笔记之三:配置HAProxy详细介绍
2.1 配置文件格式 HAProxy的配置处理3类来主要参数来源:——最优先处理的命令行参数,——“global”配置段,用于设定全局配置参数:——proxy相关配置段,如“defaults”.“li ...
- restful 和RPC 的区别
https://www.cnblogs.com/Dong-Ge/articles/9577019.html
- (二)Java数组的使用
Java数组 无序数组插入删除查询操作: public class ArrayList { private static int[] intArray; private int nElems; pub ...
- [转]<版本一>写代码的小女孩
天冷极了,下着雪,又快黑了.这是NOIP的前夜.在这又冷又黑的晚上,一个衣衫破烂的小女孩在机房敲着代码.她从班里逃出来的时候还拿着一本算导,但是有什么用呢?那是一本很破旧的书——那么大,一向是她妈妈垫 ...
- 微软Project Oxford帮助开发人员创建更智能的应用
Oxford帮助开发人员创建更智能的应用" title="微软Project Oxford帮助开发人员创建更智能的应用"> 假设你是一名对关于健身的应用充满奇思妙想 ...