VUE2实现浏览器不同分辨率下的自适应
VUE2 自适应浏览器大小:px转rem
·
1、安装px2rem插件
npm add postcss-px2rem
2、配置
1)在src下的utils目录中新建px2rem.js文件(没有utils就新建一个)
px2rem.js
// 基准大小
const baseSize = 16
// 设置 rem 函数
function setRem() {
// 当前页面宽度相对于 750 宽的缩放比例,可根据自己需要修改。
const scale = document.documentElement.clientWidth / 750
// 设置页面根节点字体大小
document.documentElement.style.fontSize = baseSize * Math.min(scale, 2) + 'px'
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.onresize = function() {
setRem()
}
2)在main.js文件中引入
main.js
import "./utils/px2rem"
3)找到 vue.config.js 文件添加配置
const px2rem = require('postcss-px2rem')
const postcss = px2rem({
remUnit: 16 //基准大小 baseSize,需要和rem.js中相同
})
module.exports = {
css: {
loaderOptions: {
postcss: {
plugins: [
postcss
]
}
}
}
}
因为修改了配置文件,所以重启一下项目就可以了
提示:
- 行内样式的px不会转换成rem
- UI库如果要改变样式,在样式的单位要使用rem
- 不想转换成rem的话将px写成PX
问题:不同脚手架版本配置方式不同,若启动报错,可检查版本问题
vue项目安装使用postcss-pxtorem,在vue.config.js中进行配置,需要注意vue-cli-service的版本。
如若vue-cli-service的版本为4,可直接在vue.config.js中进行配置。
style-resources-loader作用是可以将css或less样式文件自动引入到vue组件中,无需自己手动引入,需要下载style-resources-loader以及vue-cli-plugin-style-resources-loader,在pluginOptions配置项中进行配置。代码如下:
const path = require('path');
module.exports = {
chainWebpack: config => {
config.resolve.alias.set('@src', path.resolve(__dirname, 'src'));
},
css: {
loaderOptions: {
postcss: {
plugins: [
require('postcss-pxtorem')({
rootValue: 14.4, // 换算的基数
// 忽略转换正则匹配项。插件会转化所有的样式的px。比如引入了三方UI,也会被转化。目前我使用 selectorBlackList字段,来过滤
// 如果个别地方不想转化px。可以简单的使用大写的 PX 或 Px 。
// selectorBlackList: [/^\.el/, /^\.am/],
selectorBlackList: ['html'],
propList: ['*'],
exclude: /node_modules/,
replace: true,
mediaQuery: false,
minPixelValue: 0,
}),
],
},
},
},
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [path.resolve(__dirname, 'src/assets/less/mixins.less')],
},
},
};
如若vue-cli-service的版本为5
则按以上配置无效,postcss-pxtorem相关配置需要在postcss.config.js中设置,正确配置如下:
vue.config.js
const { defineConfig } = require('@vue/cli-service');
const path = require('path');
module.exports = defineConfig({
transpileDependencies: true,
chainWebpack: config => {
config.resolve.alias.set('@src', path.resolve(__dirname, 'src'));
},
pluginOptions: {
'style-resources-loader': {
preProcessor: 'less',
patterns: [path.resolve(__dirname, 'src/assets/less/mixins.less')],
},
},
});
postcss.config.js
module.exports = {
plugins: {
'postcss-pxtorem': {
rootValue: 14.4,
propList: ['*'],
selectorBlackList: ['html'],
exclude: /node_modules/,
replace: true,
mediaQuery: false,
minPixelValue: 0,
},
},
};
更多推荐
已为社区贡献1条内容
所有评论(0)