rem的实现

简介: rem的实现

css实现适配

设备宽度大, 元素尺寸大

设备宽度小,元素尺寸小

目前rem布局方案中,将网页等分成10份, HTML标签的字号为视口宽度的 1/10

<!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>
        /* 使用媒体查询, 根据不同的视口宽度, 设置不同的根字号 */
        @media (width:375px) {
            html {
                font-size: 40px;
            }
        }
        @media (width:320px) {
            html {
                font-size: 30px;
            }
        }
    </style>
</head>
<body>
</body>
</html>

插件实现适配

使用postcss-pxtorem插件

js实现适配

rem(倍数) = width / (html的font-size)=> width = (html的font-size) * rem(倍数)

使用 JavaScript 实现 rem 适配的方式需要两个步骤:

1.计算并设置根元素的 font-size 值。通常情况下,我们将根元素默认的 font-size 设置为 16px,然后通过 JS 计算出当前设备宽度下的根元素 font-size 值,再设置给根元素。

2.在需要使用 rem 单位的地方,根据计算得到的根元素 font-size 值,将需要设置的数值除以根元素 font-size 值,得到对应的 rem 数值。

具体的实现方式如下:

// 计算并设置根元素的 font-size 值
function setRemUnit() {
  const baseSize = 16; // 默认基准字体大小
  const designWidth = 375; // 设计稿宽度
  const screenWidth = window.innerWidth; // 屏幕宽度
  const fontSize = screenWidth / designWidth * baseSize;
  document.documentElement.style.fontSize = fontSize + 'px';
}
setRemUnit(); // 页面加载时先执行一次
// 监听窗口大小变化,重新计算 font-size 值
window.addEventListener('resize', setRemUnit);

上述代码中,我们定义了三个变量:

  • baseSize:默认的基准字体大小,即根元素默认的 font-size 值。
  • designWidth:设计稿的宽度,通常是 750 或者 375 等像素值。
  • screenWidth:当前屏幕的宽度,在浏览器中可以通过 window.innerWidth 获取。

然后我们使用 setRemUnit() 函数计算并设置根元素的 font-size 值,最后监听窗口大小变化事件,当窗口大小发生变化时,重新计算并设置根元素的 font-size 值。


相关文章
|
7月前
vw、px、vh 和 rem应用场景以及区别
【4月更文挑战第2天】 vw、px、vh 和 rem应用场景以及区别
1002 10
|
7月前
|
编解码 前端开发 小程序
CSS中rpx、px、em、rem、%、vh、vw各自都代表什么
CSS中rpx、px、em、rem、%、vh、vw各自都代表什么
141 0
|
1月前
|
UED
em/px/rem/vh/vw区别
【10月更文挑战第24天】理解和掌握 em、px、rem、vh、vw 这几种单位的特点和应用,能够帮助我们更好地进行网页设计和布局,实现更优秀的用户体验和适应不同屏幕尺寸的能力。
|
2月前
Px,em,rem的区别
【10月更文挑战第10天】 Px,em,rem的区别
103 2
|
2月前
|
前端开发 小程序 JavaScript
面试官:px、em、rem、vw、rpx 之间有什么区别?
面试官:px、em、rem、vw、rpx 之间有什么区别?
59 0
|
5月前
|
编解码 前端开发
CSS【详解】长度单位 ( px,%,em,rem,vw,vh,vmin,vmax,ex,ch )
CSS【详解】长度单位 ( px,%,em,rem,vw,vh,vmin,vmax,ex,ch )
81 0
|
7月前
|
编解码 前端开发 容器
vh,vw,px,%有什么区别
vh,vw,px,%有什么区别
374 0
|
7月前
|
编解码
px,em,rem,vw,vh之间的区别
px,em,rem,vw,vh之间的区别
|
7月前
|
编解码 前端开发
CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别
CSS中单位:【px和%】【em和rem】【vw|vh|vmin|vmax】的区别
169 0
|
编解码 前端开发 JavaScript
面试官:说一下 px、em、rem、vw/vh?em和rem的区别?
面试官:说一下 px、em、rem、vw/vh?em和rem的区别?
71 0