当前位置:首页 > JavaScript

js实现rem

2026-03-13 21:49:36JavaScript

rem 单位简介

rem(root em)是 CSS 中的相对长度单位,基于根元素(html)的字体大小进行计算。1rem 等于根元素的字体大小,默认情况下浏览器根元素字体大小为 16px。

动态设置 rem 基准值

通过 JavaScript 动态计算并设置根元素的字体大小,实现页面元素的等比缩放:

// 设计稿宽度(根据实际项目调整)
const designWidth = 750;
// 设计稿基准字体大小(通常为100px便于计算)
const baseFontSize = 100;

function setRem() {
  // 获取视口宽度
  const clientWidth = document.documentElement.clientWidth;
  // 计算比例值
  const scale = clientWidth / designWidth;
  // 设置根字体大小
  document.documentElement.style.fontSize = baseFontSize * scale + 'px';
}

// 初始化执行
setRem();
// 窗口大小变化时重新计算
window.addEventListener('resize', setRem);

CSS 中使用 rem

在 CSS 中直接使用 rem 单位,数值基于设计稿尺寸除以基准字体大小(100):

.element {
  width: 1.5rem; /* 设计稿中150px的元素 */
  font-size: 0.28rem; /* 设计稿中28px的文字 */
}

移动端适配补充

对于移动端项目,建议在 HTML 头部添加 viewport 设置:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">

PostCSS 自动转换方案

在构建工具中可使用 postcss-pxtorem 插件自动将 px 转换为 rem:

js实现rem

// postcss.config.js
module.exports = {
  plugins: {
    'postcss-pxtorem': {
      rootValue: 100,
      propList: ['*'],
      selectorBlackList: [/^html$/]
    }
  }
}

注意事项

  • 避免在非根元素上设置 font-size 为 rem 单位
  • 图片等固定尺寸元素可考虑使用 px 单位
  • 弹性布局(flex/grid)可与 rem 单位配合使用
  • 临界值处理:可设置最大/最小字体大小限制

该方案可实现不同设备上的等比缩放,保持设计稿的视觉比例关系。实际开发时应根据项目需求调整设计稿宽度和基准字体大小参数。

标签: jsrem
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

js实现驼峰

js实现驼峰

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

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…