3分钟读懂移动端rem使用方法(推荐)


Posted in Javascript onMay 06, 2019

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怎么用?

rem是css单位;
1rem的大小是通过html下的font-size这个css属性告诉浏览器的;
使用替换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);

直接执行即可

以上所述是小编给大家介绍的rem使用方法详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
使用javascript实现ListBox左右全选,单选,多选,全请
Nov 07 Javascript
jQuery操作Select的Option上下移动及移除添加等等
Nov 18 Javascript
浅谈JavaScript中定义变量时有无var声明的区别
Aug 18 Javascript
JS实现完全语义化的网页选项卡效果代码
Sep 15 Javascript
在 Express 中使用模板引擎
Dec 10 Javascript
详细分析Javascript中创建对象的四种方式
Aug 17 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
Jan 23 Javascript
详解webpack自动生成html页面
Jun 29 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
Jul 10 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
Apr 29 Javascript
vuex存取值和映射函数使用说明
Jul 24 Javascript
Vue动态组件和异步组件原理详解
May 06 #Javascript
微信小程序按钮点击跳转页面详解
May 06 #Javascript
详解vue中移动端自适应方案
May 05 #Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
May 05 #Javascript
彻底揭秘keep-alive原理(小结)
May 05 #Javascript
angular4+百分比进度显示插件用法示例
May 05 #Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
May 05 #Javascript
You might like
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
全国FM电台频率大全 - 14 江西省
2020/03/11 无线电
PHP中数组的三种排序方法分享
2012/05/07 PHP
解析smarty模板中类似for的功能实现
2013/06/18 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
php微信公众平台开发类实例
2015/04/01 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
Javascript实现的常用算法(如冒泡、快速、鸽巢、奇偶等)
2014/04/29 Javascript
Nodejs学习笔记之Stream模块
2015/01/13 NodeJs
浅谈javascript中自定义模版
2015/01/29 Javascript
jquery中ready()函数执行的时机和window的load事件比较
2015/06/22 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
bootstrap Table插件使用demo
2017/08/07 Javascript
浅谈Vue的加载顺序探讨
2017/10/25 Javascript
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
vue 动态绑定背景图片的方法
2018/08/10 Javascript
JS大坑之19位数的Number型精度丢失问题详解
2019/04/22 Javascript
[08:54]《一刀刀一天》之DOTA全时刻18:十九支奔赴西雅图队伍全部出炉
2014/06/04 DOTA
[48:05]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VGJ.T vs VP
2018/03/31 DOTA
python画出三角形外接圆和内切圆的方法
2018/01/25 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python实现最大优先队列
2019/08/29 Python
String、StringBuffer、StringBuilder有区别
2015/09/18 面试题
美发活动策划书
2014/01/14 职场文书
社区中秋节活动方案
2014/01/29 职场文书
出国留学担保书
2014/05/20 职场文书
2014年除四害工作总结
2014/12/06 职场文书
先进个人申报材料
2014/12/30 职场文书
mysql批量新增和存储的方法实例
2021/04/07 MySQL
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
springboot集成springCloud中gateway时启动报错的解决
2021/07/16 Java/Android
Python编程中Python与GIL互斥锁关系作用分析
2021/09/15 Python
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android