1、为什么要用rem

博客很久没写了,原因很简单。

最近接手了一个项目,要同时做PC和移动端的页面,之前没接触过,但毕竟给钱的是大爷,所以还是硬着头皮上了。

移动端最麻烦的是什么?

不同分辨率适配!

具体来说,有的屏幕320px宽,有的屏幕640px宽,有的更宽,如果你写固定px,那么要么小的放不下,要么大的有大片空白。

怎么办?

如果元素固定占用屏幕空间(一般是指宽度而非高度,下同)的百分之xx就ok了。

比如320px的10%是32px,640px的10%是64px,

如果10个10%宽度的元素放在一起,那肯定就是100%,即挤满屏幕(宽度),不会超出,也不会留白。

简单理解:

rem 就是指屏幕宽度的百分之x;

或者说,n个rem = 用户可视区域100%宽度

注意,之所以不说高度,是因为宽度(x轴)满了后,y轴(高度)方向的内容可以通过滚动屏幕来查看


上实例:

1、设计师给一个640px宽度的设计图,

2、你假定64rem=100%宽度(这里是640px),那么1rem=10px;

3、你照着写出了静态页面,然后按照1rem=10px的比例,将设计图上的元素的大小,全部用rem写下;

4、完美,你写的静态页面在640px宽度的页面上正常展示了;

5、A用户使用的是320px宽度的手机,因为你假设64rem=100%宽度,因此此时1rem=5px(320/64=5),于是也完美展示了;


2、rem怎么用?

  1. rem是css单位;
  2. 1rem的大小是通过html下的font-size这个css属性告诉浏览器的;
  3. 使用替换px所在的位置即可

假定你预设在设计稿的时候 1rem = 10px;

然后一个元素(class=”ele”)的宽度是20px,高度30px(设计稿),

那么你的css这么写就可以了;

html {
font-size: 10px;
} .ele {
width: 2rem;
height 3rem;
}

3、在任何分辨率下都适用

发现问题在哪里了么?如何确认1rem等于多少px?

原因是rem是css中使用的单位,css是不会帮你计算1rem是多少px的,只能通过你自己来计算。

计算方式很简单,简单来说:

1、你有一个设计稿A(假定640px),有一个预设的rem和px的比例B(假如是1rem = 10px)

2、获取用户浏览器的可视区域的宽度C(假如是320px),那么他此时1rem的尺寸D 可以根据 B/A = D/C 这个公式得知

3、原因是你假定屏幕可以容纳多少个rem,这是一个固定比例(如这里就是64rem)

1 rem = B / A * C;
//代入可得
1 rem = 10px / 640px * 320px = 5px;

4、其他

1、用户加载完后,你就得设置好1rem的尺寸吧(记得是设置在html元素下的font-size);

2、假如用户屏幕的尺寸会变,你肯定得考虑吧(刷新1);

3、你懒得去找相应的代码,我总得给你吧(如下);

var fun = function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return; //这里是假设在640px宽度设计稿的情况下,1rem = 20px;
//可以根据实际需要修改
docEl.style.fontSize = 20 * (clientWidth / 640) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
}
fun(document, window);

直接执行即可

3分钟读懂移动端rem使用方法的更多相关文章

  1. 一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    原文:http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价策略呢?这 ...

  2. 【转】一分钟读懂互联网广告竞价策略GFP+GSP+VCG

    参考这篇文章: http://ju.outofmemory.cn/entry/116780 一分钟读懂互联网广告竞价策略GFP+GSP+VCG 两个广告位,三家广告主竞价,广告平台究竟应该制定广告竞价 ...

  3. 一片非常有趣的文章 三分钟读懂TT猫分布式、微服务和集群之路

    原文http://www.cnblogs.com/smallSevens/p/7501932.html#3782600 三分钟读懂TT猫分布式.微服务和集群之路   针对新手入门的普及,有过大型网站技 ...

  4. 一分钟读懂低功耗蓝牙(BLE)连接数据包

    一分钟读懂低功耗蓝牙(BLE)连接数据包 1.概述 BLE 连接过程中有三个重要的数据包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ. SCAN_REQ: 扫描请求,由主设备(M ...

  5. 五分钟读懂UML类图

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  6. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  7. 五分钟读懂UML类图(转)

    平时阅读一些远吗分析类文章或是设计应用架构时没少与UML类图打交道.实际上,UML类图中最常用到的元素五分钟就能掌握,下面赶紧来一起认识一下它吧: 一.类的属性的表示方式 在UML类图中,类使用包含类 ...

  8. 三分钟读懂Oracle数据库容灾架之DataGuard

    Oracle数据库目前依然处于商用数据库的霸主地位. 运行在Oracle数据库上的核心业务及核心数据的安全性尤为重要. 目前市场上针对Oracle数据库常见的容灾产品大致可以分为两大类. Oracle ...

  9. 三分钟读懂TT猫分布式、微服务和集群之路

    针对入门新手的普及,有过大型网站技术架构牛人路过,别耽误浪费了时间,阅读之前,请确保有一定的网络基础,熟练使用Linux,浏览大概需要3-5分钟的时间,结尾有彩蛋. 目录 分布式 微服务 负载均衡集群 ...

随机推荐

  1. vue 使用 proxyTable 解决跨域问题

    1.在 main.js 中,在引入 axios: import axios from 'axios' Vue.config.productionTip = false Vue.prototype.$a ...

  2. Eclipse中Svn插件配置

    1. Svn插件配置教程 http://www.cnblogs.com/ruiati/p/3584120.html 2. Svn插件使用教程 http://wenku.baidu.com/link?u ...

  3. 07-django项目

    1.sql注入,xss攻击,csrf, sql注入 把sql命令插入到web表单,然后提交到所在页面请求,从而达到欺骗服务器执行恶意的sql命令 解决方法:不要使用动态拼接sql,把指令和数据分开,参 ...

  4. 使用阿里云Python SDK管理ECS安全组

    准备工作 本机操作系统:CentOS7 python版本:python2.7.5 还需要准备如下信息: 一个云账号.Access Key ID.Access Key Secret.安全组ID.Regi ...

  5. 关于Map迭代循环,key和value的顺序问题

    使用Hashtable,keySet()返回的顺序为降序(key降顺序) ---->6, 5, 4, 3, 2, 1使用TreeMap,keySet()返回的顺序为升序(key升顺序) ---- ...

  6. Loadrunner 面试常见问题

    三大组件: 脚本生成器,录制和调试脚本 . 控制台,设置运行和资源场景 结果分析器,将测试结果数据以不同的图表呈现,便于性能分析 工作原理: 录制:根据不同协议,记录下客户端和服务器二者之间的对话,生 ...

  7. 《杜增强讲Unity之Tanks坦克大战》4-坦克的移动和旋转

    4 坦克移动和旋转 本节课的目标是实现同时wsad和上下左右控制两个坦克分别移动和旋转 4.1 本节代码预览   image 将上节课场景s2另存为s3. 4.2 添加车轮扬沙效果 从Prefabs里 ...

  8. PAT甲题题解-1059. Prime Factors (25)-素数筛选法

    用素数筛选法即可. 范围long int,其实大小范围和int一样,一开始以为是指long long,想这就麻烦了该怎么弄. 而现在其实就是int的范围,那难度档次就不一样了,瞬间变成水题一枚,因为i ...

  9. Linux 第三周 学习笔记和实验

    姬梦馨 原创博客 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 常用调试参数 r(run) 开始运行程 ...

  10. PowerDesigner16工具学习笔记-建立CDM

    1.基本术语 1.1.实体和属性 实体(entity):指现实世界中客观存在,并可相互区别的事物或者事件. 属性(attribute):一组用来描述实体特征的属性. 实体集(entity set):具 ...