当前位置:首页 > JavaScript

js实现rem

2026-01-31 23:42:33JavaScript

使用 JavaScript 动态计算 rem

在移动端开发中,rem 是一种相对单位,基于根元素(html)的字体大小。通过 JavaScript 动态设置根元素的字体大小,可以实现页面在不同设备上的自适应布局。

function setRemUnit() {
  const docEl = document.documentElement;
  const width = docEl.clientWidth;
  const rem = width / 10; // 将屏幕宽度分为 10 份,1rem = 屏幕宽度的 1/10
  docEl.style.fontSize = rem + 'px';
}

// 初始化
setRemUnit();

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

结合 CSS 使用 rem

在 CSS 中,可以使用 rem 单位来定义元素的尺寸、边距等属性。由于根字体大小已通过 JavaScript 动态设置,所有使用 rem 的元素将自动适应不同屏幕尺寸。

.container {
  width: 10rem; /* 10rem = 屏幕宽度 */
  padding: 0.5rem;
  font-size: 0.32rem;
}

处理高分辨率屏幕

对于高分辨率屏幕(如 Retina 显示屏),可以结合 window.devicePixelRatio 调整 rem 的计算方式,确保显示效果更精细。

function setRemUnit() {
  const docEl = document.documentElement;
  const width = docEl.clientWidth;
  const dpr = window.devicePixelRatio || 1;
  const rem = (width * dpr) / 10;
  docEl.style.fontSize = rem + 'px';
}

兼容性处理

为了确保代码在旧版本浏览器中正常运行,可以添加 DOM 加载完成的监听事件,并在页面加载时立即执行设置。

document.addEventListener('DOMContentLoaded', setRemUnit);
window.addEventListener('load', setRemUnit);

使用媒体查询作为备用方案

尽管 JavaScript 可以实现动态调整,但在某些情况下(如 JavaScript 禁用时),可以通过 CSS 媒体查询设置一个默认的根字体大小。

js实现rem

html {
  font-size: 16px;
}

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

注意事项

  • 避免在 JavaScript 中频繁触发 resize 事件,可以通过防抖(debounce)函数优化性能。
  • 在设计与开发过程中,建议使用固定的设计稿尺寸(如 750px),并通过比例计算 rem 值。
  • 测试时需覆盖不同分辨率的设备,确保布局效果符合预期。

标签: jsrem
分享给朋友:

相关文章

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现选项卡

js实现选项卡

实现选项卡的基本思路 选项卡通常由一组标签和对应的内容面板组成。点击标签时,显示对应的内容面板,隐藏其他面板。实现这一效果需要结合HTML结构、CSS样式和JavaScript交互逻辑。 HTML结…

js实现拷贝

js实现拷贝

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

js实现图表

js实现图表

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

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化W…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…