目录

1.什么是rem?

2.为什么要用rem(rem有什么优点)?

怎样使用rem?


1.什么是rem?

rem(font size of the root element)是指相对于根元素的字体大小的单位。

2.为什么要用rem(rem有什么优点)?

都知道现在手机屏幕分辨率越来越多了,假设我们的网页需要适配的iPhone4(320px),iPhone6(375px),iPhone6 Plus(414px)。

我们的需求是,当用户浏览网页时,根据屏幕的尺寸,来向用户展示更适合用户的文字、图片、按钮大小。

在rem概念没引入前我们的做法是,以最小的屏幕(iPhone)做一版数据出来,然后通过js去控制viewport 的 initial-scale (网页缩放比例)。

早期【天猫】移动端也是用用这样的方法实现的。能满足我们的需求。缺点是:这样做会使得,因为initial-scale越来越大,相当于拉伸网页,而使得在大屏幕的移动端设备下,文字、图片会变模糊。

为了更好的满足用户需求,让我们的工作更加完美,rem就有出现的必要了。下面比较一下 px em 和 rem 的优缺点:

    1.px:像素是相对于显示器屏幕分辨率而言的相对长度单位。pc端使用px倒也无所谓,可是在移动端,因为手机分辨率种类颇多,不可能一个个去适配,这时px就显得非常无力,所以就要考虑em和rem。IE无法调整那些使用px作为单位的字体大小(Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核))。2.em(font size of the element):相对值,它以父元素的大小为基准单位,来计算大小.所以很难把握.3.rem:root em,就是相对于根目录的em而不是相对于父元素,也就是说,它虽然是绝对值,但是只是相对于根目录来说也就是html,它不会随着其它元素的改变而改变.也就是说,我们只要设定html的文字大小就可以了.而不用考虑其它因素.而且他还具有非常好的支持Chrome,Firefox,Safari,Opera,IE9+。IE6,7,8就只能使用px或者em了.

怎样使用rem?

rem是只相对于根元素htm的font-size,即只需要设置根元素的font-size,其它元素使用rem单位设置成相应的百分比即可。

一般情况下,是这样子使用的

1 html{font-size:62.5%;} /*因为100%=16px,1px=6.25%,所以10px=62.5%,
这是的1rem=10px,所以12px=1.2rem。px与rem的转换通过10就可以得来*/
2 body{font-size:12px;font-size:1.2rem ;} /*为了兼容IE的低级版本还要写font-size:12px,别忘了要写在rem的前面*/
3 p{font-size:14px;font-size:1.4rem;}
    在这里我要提到一点的就是,假如你要**用rem来设置行高边距**之类的单位.则需要在html中加入这么一句话:-webkit-text-size-adjust:none;来消除webkit的默认属性.否则在其它的地方rem不是以根目录作为基准值了.

移动端做适配的时候,可以使用这样的方法

方案一

@media screen and (min-width: 320px) {html{font-size:50px;}}
@media screen and (min-width: 360px) {html{font-size:56.25px;}}
@media screen and (min-width: 375px) {html{font-size:58.59375px;}}
@media screen and (min-width: 400px) {html{font-size:62.5px;}}
@media screen and (min-width: 414px) {html{font-size:64.6875px;}}
@media screen and (min-width: 440px) {html{font-size:68.75px;}}
@media screen and (min-width: 480px) {html{font-size:75px;}}
@media screen and (min-width: 520px) {html{font-size:81.25px;}}
@media screen and (min-width: 560px) {html{font-size:87.5px;}}
@media screen and (min-width: 600px) {html{font-size:93.75px;}}
@media screen and (min-width: 640px) {html{font-size:100px;}}
@media screen and (min-width: 680px) {html{font-size:106.25px;}}
@media screen and (min-width: 720px) {html{font-size:112.5px;}}
@media screen and (min-width: 760px) {html{font-size:118.75px;}}
@media screen and (min-width: 800px) {html{font-size:125px;}}

方案二

@media screen and (min-width: 320px) {html{font-size:312.5%;}}
@media screen and (min-width: 360px) {html{font-size:351.5625%;}}
@media screen and (min-width: 375px) {html{font-size:366.211%;}}
@media screen and (min-width: 400px) {html{font-size:390.625%;}}
@media screen and (min-width: 414px) {html{font-size:404.2969%;}}
@media screen and (min-width: 440px) {html{font-size:429.6875%;}}
@media screen and (min-width: 480px) {html{font-size:468.75%;}}
@media screen and (min-width: 520px) {html{font-size:507.8125%;}}
@media screen and (min-width: 560px) {html{font-size:546.875%;}}
@media screen and (min-width: 600px) {html{font-size:585.9375%;}}
@media screen and (min-width: 640px) {html{font-size:625%;}}
@media screen and (min-width: 680px) {html{font-size:664.0625%;}}
@media screen and (min-width: 720px) {html{font-size:703.125%;}}
@media screen and (min-width: 760px) {html{font-size:742.1875%;}}
@media screen and (min-width: 800px) {html{font-size:781.25%;}}
@media screen and (min-width: 960px) {html{font-size:937.5%;}}

方案三

var designWidth = 640, rem2px = 100;
document.documentElement.style.fontSize = ((window.innerWidth / designWidth) * rem2px) + 'px';

方案四

var designWidth = 640, rem2px = 100;
document.documentElement.style.fontSize = ((((window.innerWidth / designWidth) * rem2px) / 16) * 100) + '%';

这里的转换可以根据自己的需要进行计算设置,并不是规定死的,比如你可以设置1rem=10px,也可以设置1rem=100px。
关于这四个方案的理解和改进,请点击下面的链接,里面讲的很清楚~:
这样子就能做到仅仅改变html的字体大小,让其他字体具有“响应式”喽。

本面试题为前端常考面试题,后续有机会继续完善。我是歌谣,一个沉迷于故事的讲述者。

欢迎一起私信交流。

“睡服“面试官系列之各系列目录汇总(建议学习收藏)

“约见”面试官系列之常见面试题第二篇说说rem(建议收藏)相关推荐

  1. “约见”面试官系列之常见面试题第四十一篇之VUE生命周期(建议收藏)

    详解Vue Lifecycle 先来看看VUE官网对VUE生命周期的介绍 Vue实例有一个完整的生命周期,也就是从开始创建.初始化数据.编译模板.挂载Dom.渲染→更新→渲染.销毁等一系列过程,我们称 ...

  2. “约见”面试官系列之常见面试题第二十九篇之Vue和React的区别

    vue与react的不同之处是什么?下面本篇文章就来给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. vue与react,两者都为当下主流框架 相同之处在于: 使用 V ...

  3. “约见”面试官系列之常见面试题第二十八篇之vue中的混合(minix)实例理解

    minix 是个什么东西, 就是混合,把你混合给我 浅显表述就是 你说 : '我叫李四', 我说 : '我叫张三', 然后把你 混合给我, 就成了 我说 : '我叫张三我叫李四', 所有解说都在例子里 ...

  4. “约见”面试官系列之常见面试题第二十七篇之vue-router的重要属性

    export default new Router({mode: 'history', //路由模式,取值为history与hashbase: '/', //打包路径,默认为/,可以修改routes: ...

  5. “约见”面试官系列之常见面试题第二十四篇之vue-router使用(建议收藏)

    开发的时候有时候会遇到一种情况,比如 :点击这个链接跳转到其他组件的情况,通常会跳转到新的页面,蛋是,我们不想跳转到新页面,只在当前页面切换着显示,那么就要涉及到路由的嵌套了,也可以说是子路由的使用. ...

  6. “约见”面试官系列之常见面试题第二十三篇之get和post区别(建议收藏)

    POST和GET是HTTP协议中最常用的两种传参方式,这里小小总结一下两者的区别,欢迎补充~! 请求方式 GET POST 参数位置 url的query中 一般在content中,query也可 参数 ...

  7. “约见”面试官系列之常见面试题第二十二篇之函数闭包(建议收藏)

    目录 1.概念 2.特点 3.闭包的创建:­­­ ---------------------------------------------我是容易看懂的分界线-------------------- ...

  8. “约见”面试官系列之常见面试题第二十一篇之函数防抖和节流(建议收藏)

    目录 前言 概念 函数防抖(debounce) 函数节流(throttle) 常见应用场景 函数防抖的应用场景 函数节流的应用场景 实现原理 函数防抖(debounce) 函数节流(throttle) ...

  9. “约见”面试官系列之常见面试题第二十篇之vuex得理解(建议收藏)

    一.概念 vuex是一个专为vue.js应用程序开发的状态管理模式(它采用集中式存贮管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化). 二.五大核心属性 核心属性为:sta ...

最新文章

  1. linux valgrind Memcheck--内存检查工具
  2. Linux内核--网络栈实现分析(二)--数据包的传递过程--转
  3. python比前端好学吗_前端学习到底难不难?
  4. 【网络安全】一些webshell免杀的技巧
  5. JavaScript学习笔记系列2:Dom操作(一)
  6. centos8 安装mysql8.0
  7. tensorflow随笔——交叉熵公式推导
  8. Pytorch完成线性回归
  9. android实现标题栏弹框,Android:Dialog对话框、Builder、showDialog、模板方法设计模式...
  10. API拦截的应用,网址劫持
  11. python中安装pip_Python中如何安装pip-百度经验
  12. 系统日常维护(电脑系统)
  13. jenkins下载及安装
  14. 318公路是中国最长最美国道,沿途风景绝佳,进藏必去的最佳路线
  15. 【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码
  16. centos7 yum 配置阿里云镜像
  17. python if嵌套/while嵌套/竞技叠杯
  18. Ant Design之表格动态合并行
  19. 帅到没朋友 (20 分)
  20. 解决提示“npm audit fix“问题

热门文章

  1. 关于 部署方面研究 Visual Studio 2013
  2. 项目中通用的顶部标题和返回的TitleBar
  3. SharePoint 2013 List 备份使用
  4. [原创]linux简单之美(二)
  5. 数据库连接和异常处理的几种常用方法
  6. 新手入门:AIX操作系统安装图解
  7. nginx反向代理打印日志_nginx启用TCP反向代理日志配置
  8. python图像加密模块_使用Pycryp的图像加密和解密
  9. layui-弹出层中如何关闭窗口
  10. flask需求文件requirements.txt的创建及使用