3-1 自适应rem布局
本节编程练习不计算学习进度,请电脑登录imooc.com操作

自适应rem布局

 rem是个低调的css单位,手淘在移动端的布局是基于rem处理的,当然还要基于viewport的处理,这里暂且不表。在我的上个七夕主题中采用的是流式布局( 使用 % 百分比定义宽度,高度大都是用px来固定住)。如果使用 em 或 rem 单位进行相对布局,相对 % 百分比更加灵活,同时可以支持浏览器的字体大小调整和缩放等的正常显示。 因为em是相对父级元素的原因 没有得到推广,圣诞主题采用rem布局单位

rem是什么?

rem和em单位一样,都是一个相对单位,不同的是em是相对于元素的父元素的font-size进行计算,rem是相对于根元素html的font-size进行计算,这样一来rem就绕开了复杂的层级关系,实现了类似于em单位的功能。默认情况下浏览器给的字体大小是16px,按照转化关系 16px = 1rem

自适应处理:

使用rem布局的时候,为了兼容不同的分辨率,我们应该要动态的修正根字体的大小,让所有的用rem单位的子元素跟着一起缩放,从而达到自适应的效果

参考右边代码区域,一般情况在项目的最前面加载一段js来修改html的font-size,针对不同分辨率计算font-size,监听浏览器更改 html的font-size

docEl.style.fontSize = 20 * (docEl.clientWidth / 320) + 'px';

给html设置fontSize大小,其实就是在DOMContentLoaded或者resize变化后调整fontSize的大小,从而调整rem的比值关系。慕课的布局是右边区域展示,所以按照移动端的320宽度为标准去做适配的,当然基于这个缩放都是没关系的

总结:

根据实际情况通过设计稿与当前可视区的大小做一个比例关系,通过这个比例进行缩放处理

任务

在代码34行出填入一下代码:

20 * (docEl.clientWidth / 320) + 'px';
  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  6. <title>圣诞主题</title>
  7. <style type="text/css">
  8. section {
  9. width: 100%;
  10. height: 100%;
  11. background: red;
  12. }
  13. .page{
  14. width: 5rem;
  15. height: 10rem;
  16. background: yellow;
  17. font-size: 0.3rem;
  18. }
  19. </style>
  20. </head>
  21.  
  22. <body>
  23. <section>
  24. <div class="page">rem跟着html:font-size变化</div>
  25. </section>
  26. </body>
  27. <script type="text/javascript">
  28. var docEl = document.documentElement,
  29. //当设备的方向变化(设备横向持或纵向持)此事件被触发。绑定此事件时,
  30. //注意现在当浏览器不支持orientationChange事件的时候我们绑定了resize 事件。
  31. //总来的来就是监听当然窗口的变化,一旦有变化就需要重新设置根字体的值
  32. resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
  33. recalc = function() {
  34. //设置根字体大小
  35. docEl.style.fontSize = ?
  36. };
  37.  
  38. //绑定浏览器缩放与加载时间
  39. window.addEventListener(resizeEvt, recalc, false);
  40. document.addEventListener('DOMContentLoaded', recalc, false);
  41. </script>
  42.  
  43. </html>
  44.  
下一节