关于使用rem为单位的封装js

本文分享了使用rem单位进行手机端网页布局的经验,详细介绍了如何通过JavaScript动态调整根元素字体大小实现响应式设计,使页面能在不同屏幕尺寸下保持良好的视觉效果。

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

之前通过rem来做过一个手机端的布局,发现使用起来自适应页面还是非常方便。

直接上计算的js代码.

因为设计稿是750px,所以js中是按照750px来计算的,可以自行修改。

使用时引入js,用设计稿的px数值除以75就ok

<script>
    (function(win) {
        var remCalc = {};
        var docEl = win.document.documentElement,
                tid;
        function refreshRem() {
            var width = docEl.getBoundingClientRect().width;
            if(width > 750) {
                width = 750
            };
            var rem = width / 10;
            docEl.style.fontSize = rem + "px";
            remCalc.rem = rem;
            var actualSize = parseFloat(window.getComputedStyle(document.documentElement)["font-size"]);
            if(actualSize !== rem && actualSize > 0 && Math.abs(actualSize - rem) > 1) {
                var remScaled = rem * rem / actualSize;
                docEl.style.fontSize = remScaled + "px"
            }
        };

        function dbcRefresh() {
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 100)
        };
        win.addEventListener("resize", function() {
            dbcRefresh()
        }, false);
        win.addEventListener("pageshow", function(e) {
            if(e.persisted) {
                dbcRefresh()
            }
        }, false);
        refreshRem();
        remCalc.refreshRem = refreshRem;
        remCalc.rem2px = function(d) {
            var val = parseFloat(d) * this.rem;
            if(typeof d === "string" && d.match(/rem$/)) {
                val += "px"
            };
            return val
        };
        remCalc.px2rem = function(d) {
            var val = parseFloat(d) / this.rem;
            if(typeof d === "string" && d.match(/px$/)) {
                val += "rem"
            };
            return val
        };
        win.remCalc = remCalc
    })(window);
</script>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin李宏飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值