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调用Activex控件的事件的实现方法
Apr 11 Javascript
中文输入法不触发onkeyup事件的解决办法
Jul 09 Javascript
js获取页面传来参数的方法
Sep 06 Javascript
javascript原型链继承用法实例分析
Jan 28 Javascript
JS实现超简单的仿QQ折叠菜单效果
Sep 21 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
Dec 24 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
Jan 19 Javascript
JS实现的简单图片切换功能示例【测试可用】
Feb 14 Javascript
使用jQuery实现购物车结算功能
Aug 15 jQuery
React 无状态组件(Stateless Component) 与高阶组件
Aug 14 Javascript
100行代码实现vue表单校验功能(小白自编)
Nov 19 Javascript
深入分析jQuery.one() 函数
Jun 03 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
咖啡常见的种类
2021/03/03 新手入门
php下检测字符串是否是utf8编码的代码
2008/06/28 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
PHP __call()方法实现委托示例
2019/05/20 PHP
jQuery 常见学习网站与参考书
2009/11/09 Javascript
javascript动态添加、修改、删除对象的属性与方法详解
2014/01/27 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
javascript+html5+css3自定义提示窗口
2017/06/21 Javascript
jquery分页插件pagination使用教程
2018/10/23 jQuery
Vue数据绑定实例写法
2019/08/06 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
Atom的python插件和常用插件说明
2018/07/08 Python
对python中的乘法dot和对应分量相乘multiply详解
2018/11/14 Python
python制作填词游戏步骤详解
2019/05/05 Python
Python创建或生成列表的操作方法
2019/06/19 Python
python实现控制电脑鼠标和键盘,登录QQ的方法示例
2019/07/06 Python
django多文件上传,form提交,多对多外键保存的实例
2019/08/06 Python
关于Python形参打包与解包小技巧分享
2019/08/24 Python
python数据抓取3种方法总结
2021/02/07 Python
意大利制造的西装、衬衫和针对男士量身定制的服装:Lanieri
2018/04/08 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
标准单位租车协议书
2014/09/23 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
2015元旦标语横幅
2014/12/09 职场文书
2015年办公室主任工作总结
2015/04/09 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技
python单向链表实例详解
2022/05/25 Python
使用Apache Camel表达REST服务的方法
2022/06/10 Servers