一、基本原理
pc端做自适应可以用rem来实现,啥是rem,自己百度
二、新建rem.ts文件
// rem等比适配配置文件
// 基准大小
const baseSize = 14
// 设置 rem 函数
function setRem () {
// 当前页面宽度相对于 1920宽的缩放比例,可根据自己需要修改。这里的1920是设计图的宽度
const scale = document.documentElement.clientWidth / 1920;
// 设置页面根节点字体大小
document.documentElement.style.fontSize = baseSize * scale + 'px';
}
// 初始化
setRem()
// 改变窗口大小时重新设置 rem
window.addEventListener('resize',()=>{
setRem()
})
这个文件可以根据屏幕大小来设置根节点字体的大小,记住这里的baseSize
,然后在main.ts文件中引入
三、安装postcss-pxtorem依赖
npm install postcss-px2rem px2rem-loader --save
在vite.config.ts文件中引入,我这项目用的是vue3 + vite + ts,你用的是webpack,那就在vue.config.js里面
import postCssPxToRem from 'postcss-pxtorem';
export default defineConfig(({ mode }) => {
return {
plugins: [
vue()
],
css: {
postcss: {
plugins: [
postCssPxToRem({
// 自适应,px>rem转换
rootValue: 14, // 这里不一定要14,但必须和rem.ts文件中的baseSize大小一样
propList: ['*'], // 需要转换的属性,这里选择全部都进行转换
selectorBlackList: ['norem'], // 过滤掉norem-开头的class,不进行rem转换
}),
],
},
},
resolve: {
alias: {
// @:src 读取当前src在本地的目录
'@': resolve(__dirname, './src'),
// 'HkWebVideoCtrl': resolve('src/assets/js/webVideoCtrl.js'),
}
},
server: {
host: '0.0.0.0',
port: 8000,
open: true,
},
};
})
然后就可以直接在css里面使用px了,这个依赖会自动把px转换成rem,包括ui框架里面的,比如elmentui里面的,这样全局的css样式都是rem了,但是有一个缺陷就是行内元素里面的px不能转换,比如 <div style="width:300px"></div>
,这里的px就转换不了,所以还得手动写一个js
// 获取当前屏幕大小与1920的比列,计算大小,这里的1920还是看设计图的宽度
export const getScaleByUI = (size: number) => {
const scale = document.documentElement.clientWidth / 1920;
return size * scale;
}
<div :style="{width:getScaleByUI (300) + 'px'}"></div>
,但是不建议写在style里面,如果ui框架里面的样式用的是style,那就只能用穿透去修改了
这样所有的自适应就搞定了