使用rem.js快速进行移动端适配

简介: 最近在做移动端的微站项目,既然是移动端,那么一个不可忽视的话题就是不同设备之间的适配。目前市场上有各种品牌的手机,不同手机的屏幕分辨率不同,这就要求我们前端开发人员在做移动端项目的时候,一定要注意手机适配问题。

最近在做移动端的微站项目,既然是移动端,那么一个不可忽视的话题就是不同设备之间的适配。
目前市场上有各种品牌的手机,不同手机的屏幕分辨率不同,这就要求我们前端开发人员在做移动端项目的时候,一定要注意手机适配问题。

一、 关于rem以及rem.js的推荐文章

目前有很多大神的博客里面,已经对rem以及rem.js做了很深入的阐述和解析。所以我就不再进行解释什么是rem这个单位,以及rem.js里面的详细内容。

这里给大家推荐一篇文章,沉下心来仔细阅读这一篇文章,你就可以很清晰的掌握如何使用rem记性移动端适配。(淘宝无限适配)手机端rem布局详解

二、新手小白看过来,快速进行适配

1.首先在我们的html页面中引入meta标签

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

2.然后,在html页面中引入我们的rem.js适配脚本。(将下面的代码全部复制下来,在自己的项目代码里面新建一个rem.js脚本文件,将代码全部粘贴进去。然后在html页面中引入该脚本 )

;(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脚本进行一些简单的修改。回到我们上方的代码,整个代码就是一个函数,这个函数有两个参数,注意看一下代码的第一行,两个参数分别是designWidthmaxWidth,顾名思义,就是我们设计稿的宽度和我们设定的最大宽度。根据UI设计师给出的设计稿的宽度和规定的最大宽度给这两个参数进行传值。该如何进行传值呢,看一下上面代码的最后一行,是不是有两个数字即375750,就是在这两个数字分别就是对应着designWidthmaxWidth,我们只需更改这两个数字,即可完成传值

4.一切都设置好之后,我们便可以根据设计稿的尺寸直接进行网页搭建了。如果设计稿上面某一个元素的尺寸是256px,那么我们在css样式中,将它的尺寸设置成2.56rem即可,即1rem=100px。元素的尺寸也按照这种关系转换即可。

相关文章
|
机器学习/深度学习 自然语言处理 算法
文本摘要(text summarization)任务:研究范式,重要模型,评估指标(持续更新ing...)
本文是作者在学习文本摘要任务的过程中,根据学习资料总结逐步得到并整理为成文的相关内容。相关学习资料(包括论文、博文、视频等)都会以脚注等形式标明。有一些在一篇内会导致篇幅过长的内容会延伸到其他博文中撰写,但会在本文中提供超链接。 本文将主要列举里程碑式的重要文本摘要论文。 注意:除文首的表格外,本文所参考的论文,如本人已撰写对应的学习博文,则不直接引用原论文,而引用我撰写的博文。 本文会长期更新。
文本摘要(text summarization)任务:研究范式,重要模型,评估指标(持续更新ing...)
|
前端开发
Axios请求成功和失败时分别执行哪个函数?
Axios请求成功和失败时分别执行哪个函数?
|
前端开发 API
图片或文件Blob、File、Base64之间的相互转换
在做前端项目的时候,遇到图片的上传或者下载时,不可避免的会遇到Blob、File、Base64三种类型的转换。那么今天就总结下,三者之间的相互转换。 首先我们看看base64 ,File 对象,Blob 对象长什么样的,怎么来的。
803 1
|
前端开发 程序员 Android开发
盘点那些好玩有趣的 VSCODE 插件
“工欲善其事,必先利其器!” vscode 作为前端开发的重要工具,其插件能大幅提升战斗力,精心收集12+插件,总有几款你还未曾拥有。
1756 0
|
前端开发 JavaScript 调度
原生JavaScript实现弹幕组件
原生JavaScript实现弹幕组件
|
前端开发 JavaScript 安全
vite3+vue3 实现前端部署加密混淆 javascript-obfuscator
【11月更文挑战第7天】本文介绍了在 Vite 3 + Vue 3 项目中使用 `javascript-obfuscator` 实现前端代码加密混淆的详细步骤。包括项目准备、安装 `javascript-obfuscator`、配置 Vite 构建以应用混淆,以及最终构建项目进行混淆。通过这些步骤,可以有效提升前端代码的安全性,防止被他人轻易分析和盗用。
2449 0
|
存储 弹性计算 数据处理
阿里云对象存储OSS怎么收费?包年包月和按量付费价格表
阿里云对象存储OSS提供灵活的计费方案,包括存储费、流量费和请求费等。用户可选择按量付费或包年包月模式。标准型存储按量付费为0.09元/GB/月,包年包月则有多种套餐选择,如9元/年40GB和99元/年100GB。OSS流量费仅针对公网出方向,并区分闲忙时段。此外还提供流量包服务。更多详情及特殊需求费用(如数据处理、传输加速等)
|
前端开发 开发者
心得经验总结:快速了解layui中layer的使用
心得经验总结:快速了解layui中layer的使用
215 0
el-dialog使用::v-deep()穿透设置样式不生效,解决办法亲测有效!
el-dialog使用::v-deep()穿透设置样式不生效,解决办法亲测有效!