黑马程序员技术交流社区

标题: 【成都校区】使用rem.js快速进行移动端适配 [打印本页]

作者: 小刀葛小伦    时间: 2019-9-5 16:35
标题: 【成都校区】使用rem.js快速进行移动端适配
一、 关于rem以及rem.js的推荐文章
目前有很多大神的博客里面,已经对rem以及rem.js做了很深入的阐述和解析。所以我就不再进行解释什么是rem这个单位,以及rem.js里面的详细内容。
这里给大家推荐一篇文章,沉下心来仔细阅读这一篇文章,你就可以很清晰的掌握如何使用rem记性移动端适配。(淘宝无限适配)手机端rem布局详解
二、新手小白看过来,快速进行适配
1.首先在我们的html页面中引入meta标签
[JavaScript] 纯文本查看 复制代码
<meta name="viewport"   content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
2.然后,在html页面中引入我们的rem.js适配脚本。(将下面的代码全部复制下来,在自己的项目代码里面新建一个rem.js脚本文件,将代码全部粘贴进去。然后在html页面中引入该脚本 )
[JavaScript] 纯文本查看 复制代码
;(function (designWidth, maxWidth) {
    var doc = document,
        win = window;
    var docEl = doc.documentElement;
    var tid;
    var rootItem, rootStyle;

    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        if (!maxWidth) {
            maxWidth = 540;
        }
        ;
        if (width > maxWidth) {
            width = maxWidth;
        }
        //与淘宝做法不同,直接采用简单的rem换算方法1rem=100px
        var rem = width * 100 / designWidth;
        //兼容UC开始
        rootStyle = "html{font-size:" + rem + 'px !important}';
        rootItem = document.getElementById('rootsize') || document.createElement("style");
        if (!document.getElementById('rootsize')) {
            document.getElementsByTagName("head")[0].appendChild(rootItem);
            rootItem.id = 'rootsize';
        }
        if (rootItem.styleSheet) {
            rootItem.styleSheet.disabled || (rootItem.styleSheet.cssText = rootStyle)
        } else {
            try {
                rootItem.innerHTML = rootStyle
            } catch (f) {
                rootItem.innerText = rootStyle
            }
        }
        //兼容UC结束
        docEl.style.fontSize = rem + "px";
    };
    refreshRem();

    win.addEventListener("resize", function () {
        clearTimeout(tid); //防止执行两次
        tid = setT imeout(refreshRem, 300);
    }, false);

    win.addEventListener("pageshow", function (e) {
        if (e.persisted) { // 浏览器后退的时候重新计算
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }
    }, false);

    if (doc.readyState === "complete") {
        doc.body.style.fontSize = "16px";
    } else {
        doc.addEventListener("DOMContentLoaded", function (e) {
            doc.body.style.fontSize = "16px";
        }, false);
    }
})(375, 750);
3.最后,对我们刚刚创建的rem.js脚本进行一些简单的修改。回到我们上方的代码,整个代码就是一个函数,这个函数有两个参数,注意看一下代码的第一行,两个参数分别是designWidth 和maxWidth,顾名思义,就是我们设计稿的宽度和我们设定的最大宽度。根据UI设计师给出的设计稿的宽度和规定的最大宽度给这两个参数进行传值。该如何进行传值呢,看一下上面代码的最后一行,是不是有两个数字即375和750,就是在这两个数字分别就是对应着designWidth 和maxWidth,我们只需更改这两个数字,即可完成传值
4.一切都设置好之后,我们便可以根据设计稿的尺寸直接进行网页搭建了。如果设计稿上面某一个元素的尺寸是256px,那么我们在css样式中,将它的尺寸设置成2.56rem即可,即1rem=100px。元素的尺寸也按照这种关系转换即可。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2