rem是相对于根元素<html>,这样就意味着,我们只需要在根元素确定一个参考值,这个参考值设置为多少,完全可以根据您自己的需求来定。

我们知道,浏览器默认的字号16px,来看一些px单位与rem之间的转换关系:

|  px  |     rem       |
------------------------
| 12 | 12/16 = .75 |
| 14 | 14/16 = .875 |
| 16 | 16/16 = 1 |
| 18 | 18/16 = 1.125 |
| 20 | 20/16 = 1.25 |
| 24 | 24/16 = 1.5 |
| 30 | 30/16 = 1.875 |
| 36 | 36/16 = 2.25 |
| 42 | 42/16 = 2.625 |
| 48 | 48/16 = 3 |
-------------------------

为了方便计算,时常将在<html>元素中设置font-size值为62.5%:

相当于在<html>中设置font-size10px,此时,上面示例中所示的值将会改变:

|  px  |     rem        |
-------------------------
| 12 | 12/10 = 1.2 |
| 14 | 14/10 = 1.4 |
| 16 | 16/10 = 1.6 |
| 18 | 18/10 = 1.8 |
| 20 | 20/10 = 2.0 |
| 24 | 24/10 = 2.4 |
| 30 | 30/10 = 3.0 |
| 36 | 36/10 = 3.6 |
| 42 | 42/10 = 4.2 |
| 48 | 48/10 = 4.8 |
-------------------------

由于remcss3中的一个属性,很多人首先关注的就是浏览器对他的支持度,我截了一张caniuserem属性的兼容表:

从上图可以清楚的知道,rem在众多浏览器中都已得到很好的支持,如果您的项目不用考虑IE低版本的话,你就可以放心的使用了。

em 以父元素为参照

rem 和 em 一样,也是一个相对大小的值,它是相对于根元素 <html>,比如假设,我们设置 html 的字体大小的值为 html{font-size: 87.5%;}(也就是 14px,这是 twentytwelve 默认主题里的设置)。然后其他的字体就是将你要的值除以 14 得到的值;比如默认的twentytwelve主题大小是 960px;换算成 rem 就是 960/14=68.57142857142857rem(我这个用电脑的计算器计算的,比默认的更精确,嘿嘿);padding 的 24px 也就是 24/14=1.714285714285714rem(当然还是比 css 文件里的精确),以此类推。

简单直白的说法,可以用评论里同学的一句话来表达:

如果你没有在根元素指定参照值,那浏览器默认就是 1rem 为 16px,如果你指定了值假设为 20px,那 1rem 就为 20px。

上面的 14 是个变量,相对于你对根元素 html 字体大小的设定,如果你设定的是 62.5%,那除数就变成 10 了,对照表如右图:

用这个 rem 单位的好处有啥我不知道,不过如果你根元素的字体大小选 62.5%,那 px 和 rem 之间的换算就是 px 直接除以 10 就得到 rem 了,这比 em 简单多了,到现在我都没搞清楚 em 和 px 之间是如何换算的。

另外 rem 在 ie8 及以下的版本不支持外其他浏览器都支持,如果你要考虑 ie8 及一下,可以像 twentytwelve 默认文件那样设置个 px 再设置个 rem 就可以了。

再另外,有许多朋友问我:为啥 html 设置成 62.5%,或者 10px 时,这种换算无效了呢?经过研究发现,不知道什么时候开始,小于 12px 或者 75% 的字体大小 rem 确实不支持这种换算,这可能与现在有些浏览器不支持 12px 以下的大小有关。所以,记住一点:如果要使用 rem 单位,html 的字体默认大小必须设置为 12px 或以上才行。

最新文章

  1. Bootstrap &lt;基础二十一&gt;徽章(Badges)
  2. JSP连接数据库
  3. Anaroid WebView 的属性汇总
  4. 【C#】依赖于SharpZipLib的Zip压缩工具类
  5. Linux Bluetooth内核分析
  6. 【bzoj1057】棋盘制作
  7. JAVA的第一个程序
  8. FIFO分枝_限界算法
  9. Monkey实例测试
  10. C# 添加、修改和删除PDF书签
  11. salesforce零基础学习(八十四)配置篇: 自定义你的home page layout
  12. bzoj:3994:vijos1949: [SDOI2015]约数个数和
  13. LNMP分离式部署
  14. IM群聊消息究竟是存1份(即扩散读)还是存多份(即扩散写)?
  15. windows下cmd无法使用telnet命令解决方法 (原)
  16. json 相关知识
  17. openresty + lua 2、openresty 连接 redis,实现 crud
  18. POJ 3415 Common Substrings 【长度不小于 K 的公共子串的个数】
  19. 【BZOJ-2329&amp;2209】括号修复&amp;括号序列 Splay
  20. 共用tableview一个继承类里面有

热门文章

  1. vim编辑器使用习惯问题
  2. 大话CNN经典模型:VGGNet
  3. AD9 设置网络标号作用域
  4. TopCoder SRM 710 Div2 Hard MinMaxMax Floyd最短路变形
  5. SpringMVC集成RSA加密算法
  6. 即将到来的5G,我们该做些什么准备?
  7. 如何使用malloc申请一个二位数组
  8. runtime如何通过selector找到对应的IMP地址?(分别考虑类方法和实例方法)
  9. Pythonyield使用浅析
  10. 在Linux下安装ArcGIS10.2