摘要:rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高。本文讲的是如何使用rem实现自适应。rem这是个低调的css单位,近一两年开始崭露头角,有许多同学对rem的评价不一,有的在尝试使用,有的在使用过程中遇到坑就弃用了。但是我对rem综合评价是用来做web app它绝对是最合适的人选之一。

rem是什么

rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。

为什么web app要使用rem

这里我特别强调web app,web page就不能使用rem吗,其实也当然可以,不过出于兼容性的考虑在web app下使用更加能突显这个单位的价值和能力,接下来我们来看看目前一些企业的web app是怎么做屏幕适配的。

1. 实现强大的屏幕适配布局

最近iphone6一下出了两款尺寸的手机,导致的移动端的屏幕种类更加的混乱,记得一两年前做web app有一种做法是以320宽度为标准去做适配,超过320的大小还是以320的规格去展示,这种实现方式以淘宝web app为代表作,但是近期手机淘宝首页进行了改版,采用了rem这个单位,首页以内依旧是和以前一样各种混乱,有定死宽度的页面,也有那种流式布局的页面。·

我们现在在切页面布局的使用常用的单位是px,这是一个绝对单位,web app的屏幕适配有很多中做法,例如:流式布局、限死宽度,还有就是通过响应式来做,但是这些方案都不是最佳的解决方法。

例如流式布局的解决方案有不少弊端,它虽然可以让各种屏幕都适配,但是显示的效果极其的不好,因为只有几个尺寸的手机能够完美的显示出视觉设计师和交互最想要的效果,但是目前行业里用流式布局切web app的公司还是挺多的 上面的网站都是采用的流式布局的技术实现的,他们在页面布局的时候都是通过百分比来定义宽度,但是高度大都是用px来固定住,所以在大屏幕的手机下显示效果会变成有些页面元素宽度被拉的很长,但是高度还是和原来一样,实际显示非常的不协调,这就是流式布局的最致命的缺点,往往只有几个尺寸的手机下看到的效果是令人满意的,其实很多视觉设计师应该无法接受这种效果,因为他们的设计图在大屏幕手机下看到的效果相当于是被横向拉长来一样。

流式布局并不是最理想的实现方式,通过大量的百分比布局,会经常出现许多兼容性的问题,还有就是对设计有很多的限制,因为他们在设计之初就需要考虑流式布局对元素造成的影响,只能设计横向拉伸的元素布局,设计的时候存在很多局限性。

2.固定宽度做法

还有一种是固定页面宽度的做法,早期有些网站把页面设置成320的宽度,超出部分留白,这样做视觉,前端都挺开心,视觉在也不用被流式布局限制自己的设计灵感了,前端也不用在搞坑爹的流式布局。但是这种解决方案也是存在一些问题,例如在大屏幕手机下两边是留白的,还有一个就是大屏幕手机下看起来页面会特别小,操作的按钮也很小,手机淘宝首页起初是这么做的,但近期改版了,采用了rem。

3.响应式做法

响应式这种方式在国内很少有大型企业的复杂性的网站在移动端用这种方法去做,主要原因是工作大,维护性难,所以一般都是中小型的门户或者博客类站点会采用响应式的方法从web page到web app直接一步到位,因为这样反而可以节约成本,不用再专门为自己的网站做一个web app的版本。

4.设置viewport进行缩放

天猫的web app的首页就是采用这种方式去做的,以320宽度为基准,进行缩放,最大缩放为320*1.3 = 416,基本缩放到416都就可以兼容iphone6 plus的屏幕了,这个方法简单粗暴,又高效。说实话我觉得他和用接下去我们要讲的rem都非常高效,不过有部分同学使用过程中反应缩放会导致有些页面元素会糊的情况。

<metaname="viewport"content="width=320,maximum-scale=1.3,user-scalable=no">

5.rem能等比例适配所有的屏幕

上面讲了一大堆目前大部分公司主流的一些web app的适配解决方案,接下来讲下rem是如何工作的。上面说过rem是通过根元素进行适配的,网页中的根元素指的是html我们通过设置html的字体大小就可以控制rem的大小。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Document</title><style>/*浏览器默认的1rem = 16px = 100%1rem = 100px =  625%*/html{font-size: 625%;}.box{width:3rem;height: 3rem;background-color: #aaa;}</style>
</head>
<body><div class="box"><!-- div的宽为300px;高为300px --></div>
</body>
</html>

用JS是可以实现全适配。具体用哪个就要根据自己的实际工作场景去定了。目前国内使用了rem技术的网站,有手机淘宝,淘宝native app的首页是内嵌的web app首页。

rem是如何实现自适应布局的相关推荐

  1. [css] rem是如何实现自适应布局的?

    [css] rem是如何实现自适应布局的? 其大小与设置的html根大小相对 通过js获取当前页面的宽度,动态的调整 html{ font-size: 5px; } 来改变整个页面对应的字体大小 个人 ...

  2. rem是如何实现自适应布局的?

    rem是如何实现自适应布局的? 摘要:rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个px字号,则可以来算出元素的宽高.本文讲的是如何使用rem实现自适应. re ...

  3. H5+JS+相对单位rem实现第三方支付页(输入金额+模拟数字键盘+自适应布局+大写金额)

    最近做了个第三方支付页,H5+JS+相对单位rem实现(输入金额+模拟数字键盘+自适应布局+大写金额). 源码github地址:https://github.com/XieTongXue/how-to ...

  4. 谈谈利用JavaScript结合相对单位rem实现自适应布局的简单而实用的方法

    谈谈利用JavaScript结合相对单位rem实现自适应布局的简单而实用的方法 rem是css3新增的一个相对单位,相对的只是HTML根元素,可以只修改根元素字体大小就可以成比例地调整所有字体大小.我 ...

  5. 关于使用rem单位,calc()进行自适应布局

    关于css中的单位 大家都知道在css中的单位,一般都包括有px,%,em等单位,另外css3新增加一个单位rem. 其中px,%等单位平时在传统布局当中使用的比较频繁,大家也比较熟悉,不过px单位在 ...

  6. rem css calc,关于使用rem单位、css函数calc()进行自适应布局

    一.关于css中的单位 大家都知道在css中的单位,一般都包括有px,%,em等单位,另外css3新增加一个单位rem. 其中px,%等单位平时在传统布局当中使用的比较频繁,大家也比较熟悉,不过px单 ...

  7. js移动端rem.js自适应布局代码

    rem 是 css 的长度单位,它是相对于 元素的 font-size 的相对值.假设 html { font-size: 20px; },那么 1rem 就等于 20px. 新建rem.js文件 ( ...

  8. 静态布局、自适应布局、流式布局、响应式布局、弹性布局简析、BFC

    静态布局:给页面元素设置固定的宽度和高度,单位用px,当窗口缩小,会出现滚动条,拉动滚动条显示被遮挡内容.针对不同分辨率的手机端,分别写不同的样式文件.例如:浏览器窗口是1000px,那么最小的宽度是 ...

  9. 使用移动自适应布局+easy mock实现移动界面的简单实现

    一.使用easy mock模拟数据 easy mock链接地址 二.自己写移动自适应布局 自己编写主要是利用rem进行宽度栅格布局: html {/* 相当于一个界面适配器,pc以及移动端都可以进行设 ...

最新文章

  1. 程序员要避免的五种程序注释方式
  2. selenium 获取href find_element_by_xpath
  3. Linux系统vi编辑器执行命令,linux下vi编辑器命令
  4. 【转载】js数组的操作
  5. Failed with error: ssh variant simple does not support setting port
  6. Android开发笔记(三十九)Activity的生命周期
  7. vue中使用vuex结合sessionStorage做的登录功能
  8. 5.PHP ES 使用
  9. 21. Django进阶:内建用户系统
  10. 深入理解Servlet原理
  11. 【Chrome扩展程序】利用 background 实现跨域 fetch 访问
  12. 搭档之家:牛市来了!阿里云“临牛受命”,接到多家券商扩容需求
  13. [置顶]什么样的 CEO 是伟大的?
  14. 基于MATLAB APP Designer 和 Python 的音视频剪辑
  15. 区块链工程师薪资竟然被AI吊打?最新出炉的《2018区块链招聘分析报告》,释放了哪些重要信号?...
  16. UE4设置默认游戏模式和关卡
  17. 你在加密市场能走多远 取决于你的思维认知
  18. EmbedTLS + Eclipse C/C++测试用例SSL客户端和服务器
  19. hibernate date mysql 时间段查询
  20. webStorm2020 下载安装

热门文章

  1. python骨灰教学_python+mongodb+flask的基本使用
  2. vb.net 线程偶尔不会自动关闭_C# 多线程系列(7)手动线程通知
  3. 大学期间可以获得哪些荣誉_大学期间没有什么荣誉经历,该怎么写简历呢?找工作会很难吗?...
  4. 内存分配_go内存分配管理
  5. java tcp read_【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)...
  6. oracle 日期检查,在检查约束中使用日期,Oracle
  7. 字节跳动学习笔记:javaweb商城项目
  8. Android开发了解这些自然无惧面试,重难点整理
  9. tmux远程服务器训练
  10. 【微信小程序企业级开发教程】如何搭建服务器(tomcat)后台