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 相关文章推荐
关于IE、Firefox、Opera页面呈现异同 写脚本很痛苦
Aug 28 Javascript
JavaScript学习历程和心得小结
Aug 16 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
JavaScript验证Email(3种方法)
Sep 21 Javascript
微信小程序 前端源码逻辑和工作流详解
Oct 08 Javascript
基于JS实现仿百度百家主页的轮播图效果
Mar 06 Javascript
node.js爬虫爬取拉勾网职位信息
Mar 14 Javascript
Bootstrap页面标题Page Header的实现方法
Mar 22 Javascript
ES6正则表达式扩展笔记
Jul 25 Javascript
JavaScript中字符串的常用操作方法及特殊字符
Mar 18 Javascript
详解vue组件基础
May 04 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
星际争霸任务指南——虫族
2020/03/04 星际争霸
php实现jQuery扩展函数
2009/10/30 PHP
PHP static局部静态变量和全局静态变量总结
2014/03/02 PHP
php数组删除元素示例
2014/03/21 PHP
phpstorm编辑器乱码问题解决
2014/12/01 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
Laravel框架查询构造器 CURD操作示例
2019/09/04 PHP
js活用事件触发对象动作
2008/08/10 Javascript
Jquery 模板数据绑定插件的使用方法详解
2013/07/08 Javascript
node.js中的fs.writeFileSync方法使用说明
2014/12/14 Javascript
PHP和NodeJs开发的应用如何共用Session
2015/04/16 NodeJs
KnockoutJS 3.X API 第四章之数据控制流with绑定
2016/10/10 Javascript
jQuery实现标签页效果实战(4)
2017/02/08 Javascript
详解vuex之store拆分即多模块状态管理(modules)篇
2018/11/13 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Node.js API详解之 timer模块用法实例分析
2020/05/07 Javascript
javascript canvas封装动态时钟
2020/09/30 Javascript
[46:47]2014 DOTA2国际邀请赛中国区预选赛 DT VS HGT
2014/05/22 DOTA
[01:02:00]DOTA2-DPC中国联赛 正赛 Elephant vs IG BO3 第三场 1月24日
2021/03/11 DOTA
[01:10:27]DOTA2-DPC中国联赛正赛 SAG vs XG BO3 第二场 3月5日
2021/03/11 DOTA
跟老齐学Python之变量和参数
2014/10/10 Python
利用python画出折线图
2018/07/26 Python
在python带权重的列表中随机取值的方法
2019/01/23 Python
详解Django admin高级用法
2019/11/06 Python
Python做图像处理及视频音频文件分离和合成功能
2020/11/24 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
JBL澳大利亚官方商店:扬声器、耳机和音响系统
2018/05/24 全球购物
The North Face北面美国官网:美国著名户外品牌
2018/09/15 全球购物
墨西哥购物网站:Elektra
2020/01/21 全球购物
教师自我鉴定
2013/12/13 职场文书
小区的门卫岗位职责
2014/10/01 职场文书
2014年银行个人工作总结
2014/12/05 职场文书
幼儿园新学期开学寄语
2015/05/27 职场文书
apache基于端口创建虚拟主机的示例
2021/04/24 Servers