当前位置:首页 > 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实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…