当前位置:首页 > JavaScript

rem js实现

2026-03-02 07:56:58JavaScript

rem js实现

理解 REM 单位

REM(Root EM)是 CSS 中的相对长度单位,基于根元素(通常是 <html>)的字体大小。1 REM 等于根元素的字体大小。默认情况下,根元素的字体大小为 16px,因此 1 REM = 16px。

rem js实现

在 JavaScript 中设置 REM

通过 JavaScript 动态设置 REM 单位通常用于响应式设计,确保页面在不同设备上缩放比例一致。

// 获取根元素
const root = document.documentElement;

// 设置根元素的字体大小
function setRemUnit() {
  // 获取视口宽度(可根据需求调整计算方式)
  const viewportWidth = window.innerWidth;
  // 基于视口宽度计算 REM 值(例如,设计稿宽度为 750px 时,1 REM = 10px)
  const remValue = viewportWidth / 75;
  root.style.fontSize = `${remValue}px`;
}

// 初始化时调用
setRemUnit();

// 监听窗口大小变化
window.addEventListener('resize', setRemUnit);

计算 REM 值的逻辑

  1. 设计稿通常以固定宽度(如 750px)为标准。
  2. 设定 1 REM = 设计稿宽度 / 75(或其他比例),便于直接换算设计稿中的像素值。
  3. 例如,设计稿中 100px 的元素可直接写为 10 REM(若 1 REM = 10px)。

动态调整 REM 的优化

// 限制 REM 的最大值和最小值,避免极端情况
function setRemUnit() {
  const viewportWidth = window.innerWidth;
  const minRem = 12; // 最小 REM 值
  const maxRem = 24; // 最大 REM 值
  let remValue = viewportWidth / 75;
  remValue = Math.max(minRem, Math.min(remValue, maxRem));
  root.style.fontSize = `${remValue}px`;
}

注意事项

  • 避免在 CSS 中直接设置 <html> 的字体大小,否则会覆盖 JavaScript 的动态调整。
  • 在移动端开发中,REM 单位常用于适配不同屏幕尺寸,结合 meta viewport 使用效果更佳。
  • 使用 REM 时,CSS 中的其他相对单位(如 EM、百分比)可能会受到影响,需注意计算关系。

示例:完整代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>REM Demo</title>
  <style>
    body {
      margin: 0;
      padding: 0;
    }
    .box {
      width: 10rem;
      height: 10rem;
      background: #f00;
    }
  </style>
</head>
<body>
  <div class="box"></div>
  <script>
    const root = document.documentElement;
    function setRemUnit() {
      const viewportWidth = window.innerWidth;
      const remValue = viewportWidth / 75;
      root.style.fontSize = `${remValue}px`;
    }
    setRemUnit();
    window.addEventListener('resize', setRemUnit);
  </script>
</body>
</html>

标签: remjs
分享给朋友:

相关文章

js实现vue路由

js实现vue路由

Vue路由基础实现 使用Vue Router实现前端路由需要先安装并配置路由库。Vue Router是Vue.js官方的路由管理器。 安装Vue Router: npm install vue-r…

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…