移动端最麻烦的是什么?

  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(http://xucaizxyl.com/ 320/64=5),于是也完美展示了;
  
  2、rem怎么用?
  
  rem是css单位;
  
  1rem的大小是通过html下的font-size这个css属性告诉浏览器的;
  
  使用替换px所在的位置即可
  
  假定你预设在设计稿的时候 1rem = 10px;
  
  然后一个元素(class=”ele”)的宽度是20px,高度30px(设计稿),
  
  那么你的css这么写就可以了;
  
  html {
  
  font-size: http://www.gouyily.cn 10px;
  
  }
  
  .ele {
  
  width: 2rem;
  
  height 3rem;
  
  9
  
  3、在任何分辨率下都适用
  
  发现问题在哪里了么?如何确认1rem等于多少px?
  
  原因是rem是css中使用的单位,css http://www.gbpcci.cn 是不会帮你计算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;
  
  1
  
  2
  
  3
  
  1
  
  2
  
  3
  
  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);

posted @ 2017-04-27 13:57  王二狗的人生  阅读(152)  评论(0编辑  收藏  举报