rem 适配方案

实现原理

rem 是相对于根元素 HTML 的 font-size 计算的单位,我们可以根据屏幕宽度动态调整根字体大小。

代码 rem.ts

//utils/rem.ts方法
/**
 * 全局搜索$baseSize 同步更改sass内的$baseSize值  使用px()函数代替px生成rem
 * 建议设置大小为 80
 * 1920分辨率下 1rem === 80px
 */
const $baseSize = 80;
const scale = ref();
// rem 函数
function setRem() {
  
  // 设计稿一般都是以1920*1080
  // scale.value = Math.min(document.documentElement.clientWidth / 1920, document.documentElement.clientHeight / 1080); // 等比缩放(宽高取小)
  scale.value = (document.documentElement.clientWidth / 1920 * 0.5 + document.documentElement.clientHeight / 1080 * 0.5); // 权重调整
  // 设置页面根节点字体大小 Math.min(scale, 2)指最高放大比例为2,可根据实际业务需求调整
  document.documentElement.style.fontSize = $baseSize * Math.min(scale.value, 4) + 'px';

  window['_nowScale'] = scale;
};

// 调用方法
setRem();

// 监听窗口在变化时重新设置跟文件大小
window.onresize = function () {
  setRem();
};

全局样式文件 mixins.scss

// px转rem
$baseSize: 80; // 根目录字体大小 px
@function px($px) {
  @return  calc($px / $baseSize * 1rem);
}

组件中使用方法

<template>
  <div id="home">
    <ul class="card-box">
    </ul>
  </div>
</template>

<style lang="scss">
#home{
width:px(100)
height:px(100)
}
</style>
### 大屏开发中 REM 适配方案的最佳实践 在大屏开发中,REM 适配是一种常用的技术手段,可以确保页面元素在不同分辨率下保持比例一致[^1]。以下是关于大屏开发中使用 REM 进行适配的详细方案和最佳实践: #### 1. 基于高度的 REM 适配 考虑到大屏系统使用的显示设备通常都是宽比高更长,因此基于高度设置根节点的 `font-size` 是一种更妥当的方式。通过计算屏幕高度的比例来动态调整 `font-size`,可以更好地适应不同尺寸的大屏设备。 ```javascript function setFontSizeBasedOnHeight() { const screenHeight = window.innerHeight; document.documentElement.style.fontSize = (screenHeight / 10) + 'px'; } setFontSizeBasedOnHeight(); window.addEventListener('resize', setFontSizeBasedOnHeight); ``` 这种方式确保了页面的高度方向能够充分利用屏幕空间。 #### 2. 基于宽度的 REM 适配 另一种常见的方式是基于宽度进行 REM 适配。以 1920 × 1080 的标准屏幕为例,将屏幕分为 10 份,计算 REM 的基准值为 192(即 1920 / 10)。所有元素的长、宽、位置、字体大小等都转换为 REM 单位,网页加载后通过 JavaScript 动态设置 `html` 的 `font-size`。 ```javascript function setFontSizeBasedOnWidth() { const screenWidth = window.innerWidth; document.documentElement.style.fontSize = (screenWidth / 10) + 'px'; } setFontSizeBasedOnWidth(); window.addEventListener('resize', setFontSizeBasedOnWidth); ``` 这种方式保证了页面宽度方向上的比例缩放[^2]。 #### 3. 动态调整根节点 `font-size` 为了进一步提升适配的灵活性,可以根据设计稿的实际尺寸动态调整根节点的 `font-size`。例如,如果设计稿的宽度为 5632,则可以通过以下代码实现动态适配: ```javascript function refreshView() { const designWidth = 5632; // 设计稿宽度 const currentWidth = document.querySelector('.screen-bg').offsetWidth; document.documentElement.style.fontSize = (10 * currentWidth) / designWidth + 'px'; } refreshView(); window.addEventListener('resize', () => { if (resizeTimer) clearTimeout(resizeTimer); resizeTimer = setTimeout(refreshView, 100); }); ``` 这种方法结合了设计稿的实际尺寸和当前屏幕宽度,确保了页面元素的比例一致性[^3]。 #### 4. ECharts 字号适配 在使用 ECharts 绘图时,可能会遇到字号不变的问题。可以通过动态计算字号的方式来解决这一问题: ```javascript function filterSize(num) { const docSize = parseFloat(document.documentElement.style.fontSize); return num * docSize; } // 示例:设置 ECharts 配置中的字体大小 const option = { title: { textStyle: { fontSize: filterSize(2) // 动态计算字体大小 } } }; ``` 这种方式确保了图表中的文字大小能够随着屏幕尺寸的变化而调整。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值