做大屏自适应时,全局行内以及sass,px转vwvh方法

import Big from 'big.js';



/** Echarts图表字体、间距自适应 */
export const fitChartSize = (size: number, defalteWidth = Number(variables.screenDesignWidth)) => {
  const clientWidth =
    window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
  if (!clientWidth) return size;
  const scale = clientWidth / defalteWidth;
  return Number((size * scale).toFixed(5));
};

/** 转换为vw单位 */
export const toVw = (size: number, defalteWidth = Number(variables.screenDesignWidth)) => {
  return Number(new Big(size).div(defalteWidth).times(100).toFixed(5, 0)) + 'vw';
};

/** 转换为vh单位 */
export const toVh = (size: number, defalteHeight = Number(variables.screenDesignHeight)) => {
  return Number(new Big(size).div(defalteHeight).times(100).toFixed(5, 0)) + 'vh';
};
@use 'sass:math';
@use './variables.scss' as *;

@function toFixed($px, $num) {
  $sum: math.pow(10, $num) * 100;
  @return math.div(math.floor($px * $sum), $sum);
}

@function vw($px) {
  @return toFixed(math.div($px, $screen-design-width), 5) * 100vw;
}

@function vh($px) {
  @return toFixed(math.div($px, $screen-design-height), 5) * 100vh;
}

scss方法需要进行提前引入

vite.config.ts  

 css: {
      postcss: {
        plugins: postcssPlugins,
      },
      preprocessorOptions: {
        scss: {
          additionalData: `
         
            @use '@/styles/mixins.scss' as *;
            @use '@/styles/utils.scss' as *;
           
          `,
        },
      },

      modules: {
        generateScopedName: '[local]___[hash:base64:5]',
      },
    },
.box{
 padding: 0 vw(20) vh(20) vw(20);
}
 <div :style="{ 'font-size': toVh(14) }">哈哈哈</div>

以上为示例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值