js动态设置文档 rem 值

本文介绍了一种使用JavaScript动态调整HTML文档根元素字体大小的方法,以实现移动端H5页面的自适应布局。该方法通过计算当前设备宽度与设计稿基准宽度的比例来设定合适的字体大小单位rem。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载别人的文章~链接:http://blog.youkuaiyun.com/yisuowushinian/article/details/50204085#comments


rem 单位在做移动端的h5开发的时候是最经常使用的单位。为解决自适应的问题,我们需要动态的给文档的更节点添加font-size 值。使用mediaquery 可以解决这个问题,但是每一个文件都引用一大串的font-size 值很繁琐,而且值也不能达到连续的效果。

就使用js动态计算给文档的fopnt-size 动态赋值解决问题。

使用的时候,请将下面的代码放到页面的顶部(head标签内);

/**
 * [以iPhone6的设计稿为例js动态设置文档 rem 值]
 * @param  {[type]} currClientWidth [当前客户端的宽度]
 * @param  {[type]} fontValue [计算后的 fontvalue值]
 * @return {[type]}     [description]
 */
<script>
    var currClientWidth, fontValue,originWidth;
    //originWidth用来设置设计稿原型的屏幕宽度(这里是以 Iphone 6为原型的设计稿)
    originWidth=375;
    __resize();

    //注册 resize事件
    window.addEventListener('resize', __resize, false);

    function __resize() {
        currClientWidth = document.documentElement.clientWidth;
        //这里是设置屏幕的最大和最小值时候给一个默认值
        if (currClientWidth > 640) currClientWidth = 640;
        if (currClientWidth < 320) currClientWidth = 320;
        //
        fontValue = ((62.5 * currClientWidth) /originWidth).toFixed(2);
        document.documentElement.style.fontSize = fontValue + '%';
    }
    </script>

### REM 的含义 REM 是一种相对长度单位,用于定义 HTML 和 CSS 中的尺寸。它与 EM 单位类似,但不同之处在于 REM 的计算始终基于 **HTML 根元素 ( `<html>` )** 的字体大小,而不是当前元素或其父级元素的字体大小[^1]。 例如,当设置 `html { font-size: 16px; }` 后,所有的 REM 计算将以 16px 为基础。因此: - 1rem = 16px - 2rem = 32px - 0.5rem = 8px 这种方式使得设计更加一致和可预测,因为无论嵌套层次如何变化,REM 都不会受到其他上下文的影响。 --- ### 使用方法 #### 设置根元素字体大小 为了使 REM 正常工作,必须显式地为根元素 (`<html>`) 定义一个基础字体大小。通常的做法是在全局样式表中指定如下代码: ```css html { font-size: 16px; } ``` 此操作将整个文档的基础字体大小设定为 16px,从而让后续的所有 REM 尺寸都以此为依据[^3]。 #### 应用到具体元素 一旦设置了根元素的字体大小,就可以轻松地通过 REM 来控制页面上的任何属性,比如宽度、高度、边距等。下面是一个简单的例子: ```css .box { width: 10rem; /* 等于 160px */ height: 5rem; /* 等于 80px */ margin: 2rem; /* 上下左右各等于 32px */ padding: 1rem; /* 内部填充等于 16px */ font-size: 1.5rem; /* 字体大小等于 24px */ } ``` 在这个案例里,`.box` 的宽高分别被设成了 10倍和5倍的根元素字体大小,而外边距则统一应用了两倍的关系。 --- ### 自适应布局中的作用 由于现代设备屏幕分辨率差异巨大,固定像素(PX)往往难以满足跨平台需求。此时可以利用 REM 结合视窗百分比或者动态调整逻辑来实现响应式设计。例如,借助 JavaScript 动态改变根节点字体大小即可间接影响所有依赖它的子组件比例缩放效果[^2]: ```javascript function setRemUnit() { const baseSize = 16; // 默认基准 document.documentElement.style.fontSize = `${baseSize}px`; } window.addEventListener('resize', setRemUnit); setRemUnit(); ``` 另外需要注意浏览器兼容性问题,在某些旧版 Safari 版本可能存在 bug 导致重新渲染异常情况发生时建议采用替代方案如 EM 或者 VW/VH 单位处理特殊情况下的断点判断[^4]. --- ### 总结 综上所述,REM 提供了一种灵活且强大的机制帮助开发者构建既美观又实用的网页界面结构。只要合理规划好初始参数配置并遵循最佳实践原则就能充分发挥出该特性的优势所在。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值