一、兼容性。

目前,IE9+,Firefox、Chrome、Safari、Opera 的主流版本都支持了rem(大胆用吧,目前几乎所有手机浏览器都支持rem)

二、什么是rem。

rem是相对于根元素html字体大小来计算的,即( 1rem = html字体大小 )

三、使用rem布局有什么优点。

优点可大啦,他的强大可以让你不在考虑不同尺寸屏幕的手机,和制作PC端一样的写法,只需要设置好参数,就可以为所欲为了。

四、你可能会疑惑,但只要你看了这段JS后你会明白的,看不懂的小伙伴们,看了第五点的介绍你就会明白了。

不多说,上代码

  1. (function(designWidth, maxWidth) {
    var doc = document,
    win = window,
    docEl = doc.documentElement,
    remStyle = document.createElement("style"),
    tid; function refreshRem() {
    var width = docEl.getBoundingClientRect().width;
    maxWidth = maxWidth || ;
    width>maxWidth && (width=maxWidth);
    var rem = width * / designWidth;
    remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
    } if (docEl.firstElementChild) {
    docEl.firstElementChild.appendChild(remStyle);
    } else {
    var wrap = doc.createElement("div");
    wrap.appendChild(remStyle);
    doc.write(wrap.innerHTML);
    wrap = null;
    }
    refreshRem(); win.addEventListener("resize", function() {
    clearTimeout(tid);
    tid = setTimeout(refreshRem, );
    }, false); win.addEventListener("pageshow", function(e) {
    if (e.persisted) {
    clearTimeout(tid);
    tid = setTimeout(refreshRem, );
    }
    }, false); if (doc.readyState === "complete") {
    doc.body.style.fontSize = "16px";
    } else {
    doc.addEventListener("DOMContentLoaded", function(e) {
    doc.body.style.fontSize = "16px";
    }, false);
    }
    })(, );

五、给大家介绍下如何使用上面这段js和这段代码的意义。

1)用法很简单,只需要在html文件head最上面加入视口代码

<meta name="viewport" content="width=device-width, initial-scale=1.0">

2)然后新建一个js文件夹,将我们的佛祖和动态计算html字体大小的js代码放进去,然后在视口下面引入,就可以了,

3)使用过程中,这段js代码有两个参数可以传入,这两个参数就是你的设计师给你的设计稿宽度,填上就可以了,

4)使用很简单,设计稿宽度除以100使用即可(例如:设计稿宽度300px = 3rem,采用的是除100来换算,从而使在使用过程中更方便,无需使用rem单位换算工具)

5)rem不仅仅可以用在移动端布局,还可以用在PC端上,

例如:设计师给了你内容宽度1200px以上的设计搞要你做自适应时,你完全可以不用担心,只需要量一下设计稿宽度,修改我们js的两个参数修改为设计稿内容宽度即可。(提个醒,记得加上视口)

6)这段js主要是动态修改hrml字体大小,从而做到rem单位不动的情况下,自动适应所有手机端屏幕大小,想一下1rem在不同宽度手机上的值都是不一样的,是不是很完美呢。

7)此方法内有一段代码是可以修改的,修改为屏幕高度会有意想不到的效果,大家可以自我思考一下。

var width = docEl.getBoundingClientRect().width;//这段代码可修改

六、在用rem的时候可能会遇到点小坑,下面小编给大家列出来几个经典的。

1)border:0.01rem solid #ccc;  边框的0.01rem在手机上会看不见,所以边框的0.01rem建议使用1px替代。

2)background-size使用rem无效,建议:修改背景图大小不要卡死,使用百分比去控制,比如background-size: 100% auto;等

在你看完这篇文章之后,如果觉得对您有帮助,谢谢关注

不用再去找rem了,你想要的rem都在这的更多相关文章

  1. SSE图像算法优化系列十五:YUV/XYZ和RGB空间相互转化的极速实现(此后老板不用再担心算法转到其他空间通道的耗时了)。

    在颜色空间系列1: RGB和CIEXYZ颜色空间的转换及相关优化和颜色空间系列3: RGB和YUV颜色空间的转换及优化算法两篇文章中我们给出了两种不同的颜色空间的相互转换之间的快速算法的实现代码,但是 ...

  2. 了解这些后,再去决定要不要买Mac苹果电脑!

    我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统......表砍我...当时买mac的 ...

  3. 个人永久性免费-Excel催化剂功能第35波-Excel版最全单位换算,从此不用到处百度找答案

    全球化的今天,相信我们经常可以有机会接触到外国的产品,同时我们也有许多产品出口到外国,国与国之间的度量单位不一,经常需要做一些转换运算,一般网页提供这样的转换,但没有什么比在Excel上计算来得更为方 ...

  4. node.js零基础详细教程(7.5):mongo可视化工具webstorm插件、nodejs自动重启模块Node Supervisor(修改nodejs后不用再手动命令行启动服务了)

    第七章 建议学习时间4小时  课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...

  5. hdu6003 Problem Buyer 贪心 给定n个区间,以及m个数,求从n个区间中任意选k个区间,满足m个数都能在k个区间中找到一个包含它的区间,如果一个区间包含了x,那么 该区间不能再去包含另一个数,即k>=m。求最小的k。如果不存在这样的k,输出“IMPOSSIBLE!”。

    /** 题目:hdu6003 Problem Buyer 链接:http://acm.hdu.edu.cn/showproblem.php?pid=6003 题意:给定n个区间,以及m个数,求从n个区 ...

  6. php对象和数组的相互转换(还是可以去找没有没php的高阶课程看看看)(要不别人分析一下重点要点,要不自己来,不然 效果真的不好)

    php对象和数组的相互转换(还是可以去找没有没php的高阶课程看看看)(要不别人分析一下重点要点,要不自己来,不然 效果真的不好) 一.总结 都是自己实现的函数 算法: 1.先判断类型,gettype ...

  7. CSS绘制三角形和箭头,不用再用图片了

    前言 还在用图片制作箭头,三角形,那就太lou了.css可以轻松搞定这一切,而且颜色大小想怎么变就怎么变,还不用担心失真等问题. 先来看看这段代码: /**css*/.d1{ width: 0; he ...

  8. Android Studio线下版和线上版都使用正式签名脚本(保证keysore签名文件和项目在同级目录),不用再因为繁琐的发正式版而烦恼

    场景:调用微信等第三方应用时如果生成的版本不是正式签名的可能会调用失败,使用如下脚本不用再为繁琐的发正式签名版而烦恼 app项目中的build.gradle追加如下代码: //使用正式签名脚本(保证k ...

  9. 只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

    只要项目是maven构建的,pom.xml中依赖的jar包全都默认去你电脑本地仓库去找

随机推荐

  1. R_Studio(学生成绩)对数据缺失值md.pattern()、异常值分析(箱线图)

    我们发现这张Gary.csv表格存在学生成绩不完全的(五十三名学生,三名学生存在成绩不完整.共四个不完整成绩) 79号大学语文.高等数学 96号中国近代史纲要 65号大学体育 (1)NA表示数据集中的 ...

  2. ubuntu环境配置终极解答

    1. ubuntu中常用的5个配置文件 1)/etc/profile 2)/etc/environment 环境变量在这个文件中定义,可以用vim /etc/environment查看该文件内容 3) ...

  3. 数据加密之RSA

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  4. React 中 refs 的作用是什么?

    Refs 是 React 提供给我们的安全访问 DOM 元素或者某个组件实例的句柄.我们可以为元素添加 ref 属性然后在回调函数中接受该元素在 DOM 树中的句柄,该值会作为回调函数的第一个参数返回 ...

  5. Orchestrator MySQL主库故障切换的几种类型

    Orchestrator 对MySQL主库的故障切换分为自动切换和手动切换. 手动切换又分为recover.force-master-failover.force-master-takeover以及g ...

  6. leetcode 140 单词拆分2 word break II

    单词拆分2,递归+dp, 需要使用递归,同时使用记忆化搜索保存下来结果,c++代码如下 class Solution { public: //定义一个子串和子串拆分(如果有的话)的映射 unorder ...

  7. 如何保存 Activity 的状态?

    Activity 的状态通常情况下系统会自动保存的,只有当我们需要保存额外的数据时才需要使用到这样的功能.一般来说, 调用 onPause()和 onStop()方法后的 activity 实例仍然存 ...

  8. php URL处理函数

    parse_url()    basename()    pathinfo()    dirname() 用法 parse_url() 是一计算机函数,功能是解析一个 URL 并返回一个关联数组,包含 ...

  9. KVM + LinuxBridge 的网络虚拟化解决方案实践

    目录 文章目录 目录 前言 Linux bridge 的基本操作 创建 Bridge 将 veth pair 连上 Bridge 为 Bridge 配置 IP 地址 将物理网卡接口设备挂靠 Bridg ...

  10. swiper 的左右箭头放到轮播外面

    <!-- 增加一个father的包裹 --> <div class="swiper-father"> <div class="swiper- ...