理解 rem 方案原理

简介: 在适配不同屏幕尺寸的设备时采用等比缩放的方案

设计师交付给前端开发一张宽度为750px的视觉稿,设计稿上元素的尺寸、颜色、位置等已做过标注,要求工程师工在适配不同屏幕尺寸的设备时采用等比缩放的方案。

首先设计稿是基于 iPhone6 设计的也就是宽度 750px。(先不考虑dpr的问题下面会说)然后设置 1rem 等于 100px( HTML font-size 为 100px),相当于 7.5rem = 100%宽度 = 设备的宽度。

750 / 7.5 = 100
在这里插入图片描述

由于是基于 7.5rem 开发。iPhone6 的物理像素是 375px(dpr是2.0),如果此时还想让 7.5rem 等于设备宽度只能调整 1rem 对应 font-size 的比例, 375 / 7.5 = 50 让 1rem=50px 就可以实现。

如果想让 iPhone5 适配只需要 1rem = (320 / 7.5) = 42.66px 就可以实现 iPhone5 的适配,这个方法可以适配市面上绝大多数的移动端设备。

只需要加下面这句话可以实现我上述效果。

document.documentElement.style.fontSize = document.documentElement.clientWidth / 7.5 + 'px';

动态计算并设置不同尺寸 html 的 font-size 属性(大白话:动态计算出来不同手机页面的 html 的font-size)。动态 rem 方案既能实现页面级整体缩放,又能个性化控制某些元素不缩放。

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }

    html {
      font-size: 100px;
    }

    body {
      font-size: 16px;
    }

    .root {
      max-width: 750px;
      margin: 0 auto;
    }

    .box {
      width: 7.02rem;
      height: 2.06rem;
      border-radius: 0.24rem;
      background: red;
      margin: 0 auto;
    }
  </style>
</head>

<body>
  <div class="root">
    <div class="title">hello</div>
    <div class="box"></div>
  </div>
  <script>
    window.addEventListener('resize', () => {
      calculate()
    })
    function calculate(isFirst) {
      const width = document.documentElement.clientWidth
      const value = width > 750 ? 750 : width
      document.documentElement.style.fontSize = value / 7.5 + 'px'
    }
    calculate()
  </script>
</body>

</html>
相关文章
|
6月前
|
编解码 前端开发
前端知识笔记(十九)———px,em,rem,vw,vh之间的区别
前端知识笔记(十九)———px,em,rem,vw,vh之间的区别
137 0
umi 中如何使用 px2rem 插件做rem适配
在umi的src下面创建两个文件app.ts和document.ejs
323 0
|
24天前
|
编解码
rem 单位的缺点
【10月更文挑战第24天】rem 单位虽然在响应式设计中具有重要地位,但也存在一些不足之处。在实际应用中,我们需要充分了解这些缺点,并结合具体情况进行合理的选择和运用。同时,不断探索和创新,以找到更好的解决方案来克服这些缺点,提升响应式设计的质量和效果。
|
1月前
|
编解码 前端开发 JavaScript
前端:Rem 及其转换原理
Rem是一种用于前端开发的相对字体大小单位,它基于根元素的字体尺寸来定义文本大小,有助于实现响应式布局和可维护性。Rem的转换原理是通过相对于HTML根元素的字体大小来设置子元素的字体大小,从而实现统一的比例调整,提高页面的适应性和灵活性。此方法简化了跨浏览器和设备的布局调整,增强了用户体验。
|
27天前
|
移动开发 JavaScript 前端开发
"Vue开发者必看:一篇文章教你如何实现px自动转换vw或rem,轻松应对H5页面响应式设计挑战!"
【10月更文挑战第23天】在Vue项目中实现px到vw或rem的自动转换,可以使用PostCSS插件。首先安装`postcss-loader`,然后添加`postcss-px-to-viewport`和`postcss-pxtorem`插件,并在`postcss.config.js`中配置。配置完成后,直接在Vue组件中使用px单位编写样式,PostCSS会自动转换为vw或rem。这样可以简化开发流程,提高代码的可维护性和页面的响应式设计能力。
76 0
|
4月前
|
前端开发
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
大屏自适应/适配方案【详解】(echarts自适配、rem、flexible.js、vscode中px2rem插件自动计算rem)
661 0
|
5月前
|
前端开发
|
6月前
|
前端开发 容器
rem和vw之间有什么区别吗
【4月更文挑战第2天】 rem和vw之间有什么区别吗
101 8