rem详细介绍与实际开发使用

  • 作用 : 解决前端工作中移动端适配问题

基本概念

rem

rem 是啥?

  • rem等于css中html中font-size设定的值, 如下代码: 当font-size设置为75px, 在box设置width的值设置为1rem, 那么此时的1rem 等于 75px
html {
      font-size: 75px;
    }
.box {
      /* 75px === 1rem */
      width: 1rem;  
    }
提出等分概念?
  • 假设我有一个750px的设计稿,我可以将750px进行10等分, 那么1等分就是750/10 == 75px. 那么结合上面的rem概念, 我可以将html中的font-size设置为75px, 那么1rem就等于75px了. 那么750px就等于750/75 = 10rem. 那么不管手机有多大,我都进行十等分. 长度都为10rem. 此时有个750设计稿的一个盒子宽度为100px,那么就可以转换成100/75 = 1.25rem. 1.25rem也就是整个页面的1.25/10. 那么如果此时用的是375px大小的手机. 那么同样的显示占总屏幕 * 1.25的盒子几就可以了. 也就是 375也10等分则为一等分为37.5px. 用37.5*1.25rem就为375px大小的手机所要展示的长度.

所以等分的font-size应该如下设置 :

  • 设计稿是750px, 但是页面进行拉伸, body的宽度肯定是会变的, 那么我们就需要让页面自适应. 如果页面宽度为750px, 同样是10等分, 那么1份的值为 75px, 如果页面宽度为640px, 同样10等分, 1份的宽度就为64px,同理,320px下的1份就为32px. 在等分的概念下, 页面就能做到自适应了.
实际工作中如何设置font-size操作 ?

这里推荐使用 淘宝的插件 https://github.com/amfe/lib-flexible, npm或者直接以下复制代码都可以, copy下来的源码, 最后导入即可

 (function flexible(window, document) {
    var docEl = document.documentElement
    var 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 = viewWidth / 10
    function setRemUnit() {
      var rem = docEl.clientWidth / 10
      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) {
      var fakeBody = document.createElement('body')
      var 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)
    }
  }(window, document))

我们来演示以下, 完整代码如下 :
在十等分的情况下, 1rem的大小是多少~

<!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>
</head>
<style>
    *{margin: 0;padding: 0;}

    .box{
        font-size: 1rem;
    }
</style>
<script>
  (function flexible(window, document) {
    var docEl = document.documentElement
    var 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 = viewWidth / 10
    function setRemUnit() {
      var rem = docEl.clientWidth / 10
      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) {
      var fakeBody = document.createElement('body')
      var 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)
    }
  }(window, document))

</script>

<body>

 <div class="box">
        你好
 </div>

</body>

</html>

最后再来个vscode插件转换下px为rem

在这里插入图片描述
设置下1rem等于75px就好了
在这里插入图片描述

检验一下 ?
在这里插入图片描述
那如果设置稿为640px的呢??

那么在vscode中设置把上面的75px为64就好啦!!! 然后f12在640px下开发即可~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
px、em和rem是用于网页开发定义长度单位的三种常见选项。它们在使用和计算上有一些区别,具体如下: 1. px(像素):px 是最基本的长度单位,表示屏幕上的一个像素点。它是一个绝对单位,意味着它的大小在不同的设备和屏幕分辨率下是固定的。px 的使用相对简单,适合在需要精确控制元素大小和位置的情况下使用,比如设计稿的还原和特定元素的布局。 2. em(相对于父元素字体大小的倍数):em 是一个相对单位,相对于父元素的字体大小进行计算。如果一个元素的字体大小为 16px,设置为 2em,则相当于 32px。em 适合在需要相对于父元素进行缩放的情况下使用,比如设置标题、段落等文本元素的字体大小。 3. rem(相对于根元素字体大小的倍数):rem 也是一个相对单位,相对于根元素(即 html 元素)的字体大小进行计算。与 em 不同的是,rem 的计算不会受到父元素字体大小的影响。因此,rem 更适合在需要整个页面元素的大小比例都随着根元素字体大小变化的情况下使用,比如响应式网页设计。 使用场景: - px:适用于需要精确控制元素大小和位置,尤其是在固定布局的情况下。 - em:适用于需要相对于父元素进行缩放的文本元素,如标题、段落等。 - rem:适用于需要整个页面元素的大小比例随根元素字体大小变化的响应式设计。 需要注意的是,不同的单位在不同的场景下有不同的优劣,并且可以混合使用。根据实际需求和网页布局的要求,选择合适的单位进行使用

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值