Vue3中rem适配方案 淘宝flexible在PC端适配

//useFlexibleRem.ts

export function useFlexibleRem() {
  const docEl = document.documentElement;
  const dpr = window.devicePixelRatio || 1;

  // adjust body font size
  function setBodyFontSize() {
    if (document.body) {
      document.body.style.fontSize = 12 * dpr + "px";
    } else {
      document.addEventListener("DOMContentLoaded", setBodyFontSize);
    }
  }
  setBodyFontSize();

  // set 1rem dynamically based on screen width
  function setRemUnit() {
    const designWidth = 1920; // 设计稿宽度
    const minWidth = 1024; // 最小适配的屏幕宽度
    const screenWidth = Math.max(docEl.clientWidth, minWidth); // 当前屏幕宽度与最小适配宽度比较
    const rem = (screenWidth / designWidth) * 100; // 1rem = 100px at designWidth
    docEl.style.fontSize = rem + "px";
  }

  setRemUnit();

  // reset rem unit on page resize
  window.addEventListener("resize", setRemUnit);
  window.addEventListener("pageshow", function (e) {
    if (e.persisted) {
      setRemUnit();
    }
  });

  // detect 0.5px supports
  if (dpr >= 2) {
    const fakeBody = document.createElement("body");
    const testElement = document.createElement("div");
    testElement.style.border = ".5px solid transparent";
    fakeBody.appendChild(testElement);
    docEl.appendChild(fakeBody);
    if (testElement.offsetHeight === 1) {
      docEl.classList.add("hairlines");
    }
    docEl.removeChild(fakeBody);
  }
}

在main.ts中使用

// main.ts

import { useFlexibleRem } from "@/hooks/useFlexibleRem"; // 导入插件
// 使用插件设置 REM 适配
useFlexibleRem();

这个函数导入成功后即可在项目中任意地方使用,使用方法为在1920*1024这个设计稿下100px为1rem。最小适配大小为宽度为1024px。

注意:

在开发项目过程中注意字体大小最小为12px的适配

该函数有以下功能:

1、设置页面的根字体大小 (rem),以适应不同屏幕宽度。
2、根据设备像素比率 (devicePixelRatio) 调整页面元素的样式,以支持高分辨率屏幕。
3、监听窗口的变化事件,以动态调整字体大小和布局

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值