vue-cli 2.x和3.x配置移动端适配px自动转为rem
# vue-cli2.x
- 安装依赖
npm install px2rem-loader --save-dev
npm install lib-flexible --save
1
2
2
- 在 src/main.js 中引入
import 'lib-flexible';
1
- 在 build/utils.js 中加入以下代码
exports.cssLoaders = function (options) {
// ...
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 75
}
}
// ...
function generateLoaders (loader, loaderOptions) {
// 在原来的loader添加上px2remLoader
const loaders = options.usePostCSS ? [cssLoader, postcssLoader, px2remLoader] : [cssLoader, px2remLoader]
// ...
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- 如果想要页面的viewport缩放则需要将 index.html 中注释掉原来的设置
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<!--
官方上说是要把这里注释掉
此处注释掉之后,lib-flexible 会根据不同的屏幕自动添加,比如2倍屏这里就是 0,5
但是,我这用的时候有点坑。。
如果将此注释掉,在某些需要写 px 的地方,就会出现在不同的屏幕上看到的 大小不一样的问题,因为缩放的比例不同了。比如富文本渲染,就得用px
解决办法是使用不注释此代码,在任何手机上都是按照1倍进行缩放。。px2remloader会自动计算,不会有问题
这里看各自项目的需要吧
-->
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# vue-cli 3.x
- 下载依赖
npm install postcss-pxtorem --save-dev # 此处和2.x 不一样的插件
npm install lib-flexible --save
1
2
2
- 在 src/main.js 中引入
import 'lib-flexible/flexible.js'; # 此处和2.x不一样
1
- 在文件中配置
3.1 配置方法一:
新建 .postcssrc.js 文件配置(详细配置)
module.exports = {
plugins: {
// 兼容浏览器,添加前缀
autoprefixer: {
overrideBrowserslist: [
"Android 4.1",
"iOS 7.1",
"Chrome > 31",
"ff > 31",
"ie >= 8",
"last 10 versions", // 所有主流浏览器最近10版本用
],
grid: true,
},
"postcss-pxtorem": {
rootValue: 37.5, //结果为:设计稿元素尺寸/16,比如元素宽320px,最终页面会换算成 20rem
propList: ["*"], //是一个存储哪些将被转换的属性列表,这里设置为['*']全部,假设需要仅对边框进行设置,可以写['*', '!border*']
unitPrecision: 5, //保留rem小数点多少位
//selectorBlackList: ['.radius'], //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。
replace: true, //这个真不知到干嘛用的。有知道的告诉我一下
mediaQuery: false, //媒体查询( @media screen 之类的)中不生效
minPixelValue: 12, //px小于12的不会被转换
},
},
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
也可以这样(简单一点)
module.exports = {
plugins: {
'autoprefixer': {
browsers: ['Android >= 4.0', 'iOS >= 8']
},
'postcss-pxtorem': {
rootValue: 37.5,
propList: ['*']
}
}
}
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
3.2 配置方法二:
在package.json中配置
{
"postcss": {
"plugins": {
"autoprefixer": {},
"postcss-pxtorem": {
"rootValue": 75, // 设计稿宽度的1/10,(JSON文件中不加注释,此行注释及下行注释均删除)
"propList":["*"], // 需要做转化处理的属性,如`hight`、`width`、`margin`等,`*`表示全部
"unitPrecision": 5, //保留rem小数点多少位
//"selectorBlackList": ['.radius'], //则是一个对css选择器进行过滤的数组,比如你设置为['fs'],那例如fs-xl类名,里面有关px的样式将不被转换,这里也支持正则写法。
"replace": true, //这个真不知到干嘛用的。有知道的告诉我一下
"mediaQuery": false, //媒体查询( @media screen 之类的)中不生效
"minPixelValue": 12, //px小于12的不会被转换
}
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
- 如果想要页面的viewport缩放则需要将 public/index.html 中注释掉原来的设置, 通上面的第四步。
注意
关于脚手架生成项目,配置自适应postcss-pxtorem配置报错: Syntax Error: Error: PostCSS plugin postcss-pxtorem requires PostCSS 8.
这是由于版本过高导致的,只需降低版本即可:
npm i postcss-pxtorem@5.1.1
1
上次更新: 2024/01/30, 00:35:17
- 01
- Node与GLIBC_2.27不兼容解决方案08-19
- 02
- Git清空本地文件跟踪缓存08-13