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 放大镜 移动镜片效果代码
May 09 Javascript
JavaScript中计算网页中某个元素的位置
Jun 10 Javascript
JavaScript函数中关于valueOf和toString的理解
Jun 14 Javascript
jQuery EasyUI tree 使用拖拽时遇到的错误小结
Oct 10 Javascript
jQuery基于ajax操作json数据简单示例
Jan 05 Javascript
Jquery+Ajax+xml实现中国地区选择三级联动菜单效果(推荐)
Jun 09 jQuery
bootstrap多层模态框滚动条消失的问题
Jul 21 Javascript
JS库之Three.js 简易入门教程(详解之一)
Sep 13 Javascript
使用JQuery实现图片轮播效果的实例(推荐)
Oct 24 jQuery
详解React 在服务端渲染的实现
Nov 16 Javascript
vue中选中多个选项并且改变选中的样式的实例代码
Sep 16 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
Oct 09 jQuery
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+SQL 注入攻击的技术实现以及预防办法
2010/12/29 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
2017/02/28 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
2019/10/10 PHP
一种JavaScript的设计模式
2006/11/22 Javascript
脚本合并提升javascript性能示例
2014/02/24 Javascript
JavaScript打印网页指定区域的例子
2014/05/03 Javascript
Javascript获取CSS伪元素属性的实现代码
2014/09/28 Javascript
使用Angular.js开发的注意事项
2016/10/19 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
JavaScript简单拖拽效果(1)
2017/05/17 Javascript
VUE2 前端实现 静态二级省市联动选择select的示例
2018/02/09 Javascript
在vue项目中,将juery设置为全局变量的方法
2018/09/25 Javascript
解决layui动态加载复选框无法选中的问题
2019/09/20 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
详解JavaScript类型判断的四种方法
2020/10/21 Javascript
Python操作SQLite简明教程
2014/07/10 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
Django 登陆验证码和中间件的实现
2018/08/17 Python
python使用magic模块进行文件类型识别方法
2018/12/08 Python
浅谈python的elementtree模块处理中文注意事项
2020/03/06 Python
Python字节单位转换(将字节转换为K M G T)
2021/03/02 Python
html5视频播放_动力节点Java学院整理
2017/07/13 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
公司周年庆典策划方案
2014/05/17 职场文书
库房管理员岗位职责
2015/02/12 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
山楂树之恋观后感
2015/06/11 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
MySQL详细讲解变量variables的用法
2022/06/21 MySQL
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技