前端rem适配(自适应布局)

前言

在开发过程中,前端会存在多种不同的适配方案,如自适应布局,响应式布局。

  • 自适应布局:在不同设备,不同视口宽度的情况下,让页面显示效果相同。
  • 响应式布局:在不同设备,不同视口宽度的情况下,让页面显示不同的效果,如手机端和PC端的不同效果。

在自适应布局中,em、rem是目前常用的适配手段,接下来主要探讨使用rem进行自适应适配的方案。


一、场景

已知设计图宽度是1920*1080,现需要对不同终端,不同屏幕大小(如1920*1080 125%,1920*1080 100% ,2560*1600 125%,3000*2000 200&本人电脑)进行适配。

二、计算

模糊计算

一般在使用rem做自适应布局中,会首先未根节点设置一个数值( html: { font-size: 62.5% } );

其计算过程如下:

      1. 首先大多数浏览器的默认字体大小都是16px;根据rem计算原则得到此时的rem为

                1rem = 根节点字体大小 = 16px

      2. 为了方便计算,此时想把 1rem = 10px,之后的开发中设置125px可以直接转化成12.5rem

                html { font-size: 62.5% } ( 10px / 16px )

      3. 所以此时 1rem = 16px * 62.5%(10px / 16px) = 10px

精确计算

开发之前,先对照设计图计算并设置出rem

const setRem = () => {
  const reScreenSize = (wid) => {
    // 当设备宽度小于1400px时,不在改变rem的值
    if (wid <= 1400) return;
    let w = document.documentElement.clientWidth; // 获取设备的宽度
    let n =
      10 * (w / 1920) > 40
        ? 40 + 'px'
        : 10 * (w / 1920) >= 7.4
        ? 10 * (w / 1920) + 'px'
        : 7.4 + 'px';
    document.documentElement.style.fontSize = n;
  };
  reScreenSize();
  window.addEventListener('load', reScreenSize);
  window.addEventListener('resize', () => reScreenSize(document.documentElement.clientWidth));
};
export default setRem;

本次开发场景是应用与React中,创建一个设置rem的工具类。

三、理解

个人理解在使用rem时与使用%进行对不同设备进行适配时的效果和原理相近,只不过在使用百分比进行开发时不容易控制细节问题,所以在一些细节掌控方面还需要进行rem适配及计算。对本场景的理解如下:

        使用场景:1920*1080设计稿

        设置rem:为方便计算,设置 1rem = 10px(这里的px相对于设计稿来说)

        计算:

                1rem = 10 * ( 视口宽度 /  设计稿宽度 )

                 在此基础上增加一些不同情况的容错,最后可以得:                                                       

const reScreenSize = (wid) => {
    if (wid <= 1400) return;
    let w = document.documentElement.clientWidth; // 获取设备的宽度
    let n =
      10 * (w / 1920) > 40
        ? 40 + 'px'
        : 10 * (w / 1920) >= 7.4
        ? 10 * (w / 1920) + 'px'
        : 7.4 + 'px';
    document.documentElement.style.fontSize = n;
  };

       在计算好rem后,添加监听事件,当页面加载load以及视口变化resize时,执行监听事件去改变rem,以达到对不同设备适配,不同放大比例适配。

四、效果

1920*1080 100% 设备下显示

 3000*2000 100% 设备下显示

 开发小贴士:

        在使用VsCode进行前端开发时,VsCode有一个叫px to rem & rpx & vw (cssrem)的插件,可以设置rem的基准font-size:10。在样式时,可以按照设计图直接输入300px,会有代码提示换算后的rem,无需手动在计算,非常好用o( ̄▽ ̄)d


总结

在自适应适配中,利用rem相对尺寸的特性,根据视口大小的不同,不变改变根节点的字体大小,从而改变rem的相对大小,最后计算得出在不同视口下的px。

以上是在项目中,碰到的关于使用rem适配的问题,以及个人对rem的理解。后续如果有新的理解会不断更新。

  • 3
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值