当前位置:首页 > JavaScript

js实现rem

2026-04-05 16:01:05JavaScript

rem 的实现原理

rem(root em)是相对于根元素(html)字体大小的单位。通过动态调整根元素的字体大小,可以实现页面元素的等比缩放,适配不同屏幕尺寸。

设置根元素字体大小

在HTML文件的<head>部分添加以下代码,确保脚本在页面加载时立即执行:

<script>
  document.documentElement.style.fontSize = document.documentElement.clientWidth / 10 + 'px';
</script>

这段代码将根元素字体大小设置为视口宽度的1/10。例如,375px宽度的设备会得到37.5px的根字体大小。

使用 rem 单位

在CSS中,所有需要适配的元素尺寸使用rem单位。例如:

.box {
  width: 2rem; /* 相当于2倍的根字体大小 */
  height: 3rem;
  font-size: 0.8rem;
}

动态调整脚本

为了应对窗口大小变化,需要添加resize事件监听:

function setRemUnit() {
  const docEl = document.documentElement;
  const rem = docEl.clientWidth / 10;
  docEl.style.fontSize = rem + 'px';
}

window.addEventListener('resize', setRemUnit);
window.addEventListener('pageshow', function(e) {
  if (e.persisted) setRemUnit();
});

媒体查询兼容方案

为极端情况添加媒体查询作为后备方案:

@media screen and (max-width: 320px) {
  html { font-size: 32px; }
}
@media screen and (min-width: 540px) {
  html { font-size: 54px; }
}

PostCSS 自动转换

在构建工具中配置PostCSS插件,自动将px转换为rem:

// postcss.config.js
module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 37.5,  // 设计稿宽度/10
      propList: ['*'],
      selectorBlackList: [/^html$/]
    }
  }
}

设计稿适配技巧

假设设计稿宽度为375px:

js实现rem

  • 开发时直接使用设计稿标注的px值
  • 通过构建工具自动转换为rem
  • 1px边框问题可使用transform scale解决

标签: jsrem
分享给朋友:

相关文章

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 或直接使用 window.location 实现页面跳转,适用于普通跳转或带参数的 URL。 // 方…

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 // 获取所有…

js 实现链表

js 实现链表

链表的基本概念 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,插入和删除操作效率较高。 链表的实现 在 JavaScrip…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…