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下判断IE与FF的比较简单的方式
Oct 17 Javascript
JS常见问题整理(持续更新)
Aug 06 Javascript
自动设置iframe大小的jQuery代码
Sep 11 Javascript
JS 有趣的eval优化输入验证实例代码
Sep 22 Javascript
jquery删除数据记录时的弹出提示效果
May 06 Javascript
JavaScript设计模式学习之“类式继承”
Mar 12 Javascript
javascript实现点击后变换按钮显示文字的方法
May 13 Javascript
jQuery实现可拖拽3D万花筒旋转特效
Jan 03 Javascript
浅析Vue 和微信小程序的区别、比较
Aug 03 Javascript
Vue异步组件处理路由组件加载状态的解决方案
Sep 07 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
Jun 11 Javascript
Python机器学习之决策树和随机森林
Jul 15 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
php遍历所有文件及文件夹的方法深入解析
2013/06/08 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
学习YUI.Ext 第二天
2007/03/10 Javascript
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
JSChart轻量级图形报表工具(内置函数中文参考)
2010/10/11 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
JQuery中阻止事件冒泡几种方式及其区别介绍
2014/01/15 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
jQuery随机密码生成的方法
2015/03/09 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
jQuery实现带有动画效果的回到顶部和底部代码
2015/11/04 Javascript
实例讲解jQuery中对事件的命名空间的运用
2016/05/24 Javascript
详解用webpack2.0构建vue2.0超详细精简版
2017/04/05 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
Angular value与ngValue区别详解
2019/11/27 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
利用Python中的输入和输出功能进行读取和写入的教程
2015/04/14 Python
Python数据报表之Excel操作模块用法分析
2019/03/11 Python
Python开发之身份证验证库id_validator验证身份证号合法性及根据身份证号返回住址年龄等信息
2020/03/20 Python
如何在django中实现分页功能
2020/04/22 Python
卸载tensorflow-cpu重装tensorflow-gpu操作
2020/06/23 Python
django 将自带的数据库sqlite3改成mysql实例
2020/07/09 Python
纯CSS3制作的鼠标悬停时边框旋转
2017/01/03 HTML / CSS
html5模拟平抛运动(模拟小球平抛运动过程)
2013/07/25 HTML / CSS
利用html5的websocket实现websocket聊天室
2013/12/12 HTML / CSS
c++工程师面试问题
2013/08/04 面试题
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
法学专业本科生自荐信范文
2013/12/17 职场文书
清明节扫墓活动方案
2014/03/02 职场文书
人事代理委托书
2014/09/27 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
物业管理交接协议书
2016/03/24 职场文书
新手开公司创业注意事项有哪些?
2019/07/29 职场文书
Python实现拼音转换
2021/06/07 Python