vue pc端网页实现自适应

一、基本原理

pc端做自适应可以用rem来实现,啥是rem,自己百度

二、新建rem.ts文件

javascript 复制代码
// 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依赖

javascript 复制代码
npm install postcss-px2rem px2rem-loader --save

在vite.config.ts文件中引入,我这项目用的是vue3 + vite + ts,你用的是webpack,那就在vue.config.js里面

javascript 复制代码
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

javascript 复制代码
// 获取当前屏幕大小与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,那就只能用穿透去修改了

这样所有的自适应就搞定了

相关推荐
花开盛夏^.^16 分钟前
电脑打开多个浏览器Web窗口占用较大的运行内存的原因
前端·浏览器
Dxy12393102161 小时前
JS DES 加密详解
开发语言·javascript·arcgis
充值内卷1 小时前
我给桌面加了个鱼缸:C++ 写后端,WebView2 里养一座 Three.js 小岛
开发语言·javascript·c++
馒头不想说话1 小时前
实体店老板的24小时AI运营员工,写、剪、发全自动,省下一整个团队工资
前端
椒哥3 小时前
一天被问几十次"允许",我统计了 517 次,然后写了个插件
前端·javascript·github
风骏时光牛马3 小时前
生成一个AI稳定性治理及疑难问题分析标题,只需要一个标题,不需要其他的任何文本。
前端
莫西干式秃头4 小时前
用 AI + threejs 写了个浏览器里的 3D 动作游戏《武来》:砍怪、放技能、开 SU7
前端·人工智能·three.js
kyriewen4 小时前
我测了 6 种防请求竞态的写法:只有 1 种真能打
前端·javascript·程序员
孟健4 小时前
用 WorkBuddy 做个人名片网页,挂上开源设计技能后效果完全不同了
前端·人工智能·ai编程
IT_陈寒4 小时前
SpringBoot自动配置的坑,这次终于爬出来了
前端·人工智能·后端