移动端的rem:

使用方法:

  • 设置html的font-size,根据浏览器分辨率缩放

      • 设置根元素font-size为100px这样好用的值,不要设为10px这样的;
      • 然后获取浏览器的分辨率,也就是视口宽度,p(比例尺)= 视口宽度/效果图宽度
      • 根元素font-size=100px*p
      • 然后来个resize去跟随浏览器大小变化
 1(function (win){
7 var doc = win.document,
8 html = doc.documentElement,
9 option = html.getAttribute('data-use-rem');
10
11 if( option === null ){
12 return;
13 }
14
15 // defaut baseWidth : 640px;
16 var baseWidth = parseInt(option).toString() === 'NaN' ? 640 : parseInt(option);
17 var grids = baseWidth / 100;
18 var clientWidth = html.clientWidth || 320;
19
20 // set rem first
21 html.style.fontSize = clientWidth / grids + 'px';
22
23 // create testDom
24 var testDom = document.createElement('div');
25 var testDomWidth = 0;
26 var adjustRatio = 0;
27 testDom.style.cssText = 'height:0;width:1rem;';
28 doc.body.appendChild(testDom);
29
30 var calcTestDom = function(){
31 testDomWidth = testDom.offsetWidth;
32 if( testDomWidth !== Math.round(clientWidth / grids) ){
33 adjustRatio = clientWidth/grids/testDomWidth;
34 var reCalcRem = clientWidth*adjustRatio / grids;
35 html.style.fontSize = reCalcRem + 'px';
36 } else{
37 doc.body.removeChild(testDom);
38 }
39 };
40
41 // detect if rem calc is working directly
42 // if not , recalc and set the rem value
43 setTimeout(calcTestDom, 20);
44
45 var reCalc = function(){
46 var newCW = html.clientWidth;
47 if ( newCW === clientWidth ){
48 return;
49 }
50 clientWidth = newCW;
51 html.style.fontSize = newCW*(adjustRatio?adjustRatio:1) / grids + 'px';
52 // if( testDom ) setTimeout(calcTestDom, 20);
53 };
54
55 // Abort if browser does not support addEventListener
56 if (!doc.addEventListener){
57 return;
58 }
59
60 var resizeEvt = 'orientationchange' in win ? 'orientationchange' : 'resize';
61
62 win.addEventListener(resizeEvt, reCalc, false);
63 // detect clientWidth is changed ?
64 doc.addEventListener('DOMContentLoaded', reCalc, false);
65
66 })(window);

上面的是xiaojue写的一段代码,其中重要的一部分就是判断div的大小是否是精确的

说了rem布局,下面来说说百分比布局

百分比栅格化布局:

这里的栅格化布局方法和思路其实都很简单,就按照bootstrap的思路来,就是将一个容器,宽度一定或100%的,用一个分子去把这个容器分为很多份,bootstrap的方法是用百分比的方法来将这个容器分为n等份,这就是栅格化的思路,其实不难,就看你的思路是怎样的,实现起来也是不同。以后有机会会深入的学习一些栅格化布局的思想和优秀方法。

上面介绍了两种移动端布局方法,其实我们总结一下他们的优缺点,rem只能在移动端进行布局,然后等比例的缩放,在pc端还是用px这种惯用的方法去实现比较好,rem并不能实现响应式布局,这是重要的缺点,rem只在移动端起到一个比较好的作用,当然以后的发展会说不定,也可能还有人发明出厉害的设计方案。而百分比的布局,这种方式有一点是有很大问题的,他是无法做到定高的,这是为什么,因为百分比定高,有时候bug很明显,所以很多人用px定高,这样不同分辨率的手机会使得显示不一样。

移动端rem布局和百分比栅格化布局的更多相关文章

  1. 细说移动端 经典的REM布局 与 新秀VW布局

    和以往一样,本次项目也放到了 Github 中,欢迎围观 star ~ 1. 前言 2. 基本概念 3. REM布局 4. VW布局 实现单边边框1px 实现多边边框1px 实现边框圆角 实现容器固定 ...

  2. 一看就懂得移动端rem布局、rem如何换算

    这里使用了js控制根元素的font-size大小,然后进行rem换算,在js代码后面会说明以下问题. 1.如何进行rem运算? 2.如果纯js控制根元素用rem布局会出现的小问题,如何解决? 3.如有 ...

  3. 第130天:移动端-rem布局

    一.关于布局方案 当拿到设计师给的UI设计图,前端的首要任务就是布局和样式,相信这对于大部分前端工程师来说已经不是什么难题了.移动端的布局相对PC较为简单,关键在于对不同设备的适配.之前介绍了一篇关于 ...

  4. 移动端REM布局模板(阿里高清方案)

    移动端REM布局模板(阿里高清方案),蛮好的,转自: http://www.jianshu.com/p/985d26b40199 . <!DOCTYPE html> <html la ...

  5. 移动端Rem布局注意事项

    1.布局的总体结构框架:      2.注意事项: (a):如果是左右两栏的布局方式,须在article的同级加一个aside: 因为是同级,所以必须设置同样的样式:而且他俩的父级,也就是sectio ...

  6. 移动端rem适应布局

    移动端rem适应布局 rem rem(root em)是一个相对单位,类似于em,em是父元素字体大小. 不同的是rem的基准是相对于html元素的字体大小. 比如,根元素(html)设置font-s ...

  7. 移动适配请使用比rem等更好的布局方案

      移动端大行其道,rem/em.百分比.响应式方案更是层出不穷,看见周围的伙伴们都在对使用rem和百分比情有独钟,可我却偏不爱,之所以出现如此多的方法,其目的只有一个屏幕适配.   屏幕适配顾名思义 ...

  8. vue 实现 rem 布局的 或者 vw 布局的方法

    vue 实现 rem 布局的 或者 vw 布局的方法 一.实现 rem 布局 移动端 <meta name="viewport" content="width=de ...

  9. Web前端_流式布局(百分比布局)

    移动Web_流式布局(百分比布局) writer:late at night codepeasant 1(百分比布局) ☞核心知识点 1.流式布局(百分比布局) 2.视口设置 ☞今日目标 1. 能够使 ...

随机推荐

  1. Android:activity跳转过渡效果

    放在startActivity(intent);后面 overridePendingTransition(android.R.anim.fade_in,android.R.anim.fade_out) ...

  2. Android:@id和@+id

    @id代表引用已有的id,而@+id是新增加一个id 如果使用@+id/name形式,当R.java中存在名为name变量时,则该组件会使用该变量的值作为标识.如果不存在该变量,则添加一个新的变量,并 ...

  3. 锋利的JQuery-认识Jquery

    今天开始学习菜鸟的JQuery,这本书在一前看过一遍了,但是由于虽然看了,但是将近一年在工作中基本上没有用上,很是悲催,菜鸟想,用一到两个星期时间把这本书看一遍吧.就像菜鸟前面的jsdom一样,菜鸟写 ...

  4. 使用ANT打包Android应用

    大家好,今天来分享一下如何使用ANT打包Android应用. 通常我们习惯用eclipse来开发Android程序,它会自动帮我们打包当前的应用程序.如果在Navigator视图下,我们可以看到以下几 ...

  5. java正则表达式应用--验证字符串是否为数字(转载)

    首先说一下java正则表达式的重点概念: 第一.相关类:Pattern.Matcher 第二.典型的调用顺序是 Pattern p = Pattern.compile("a*b") ...

  6. 函数flst_get_last

    flst_node_t中存有12个字节的内容,前6个字节(page:4 boffset:2)表示相对自己前一个node的fil_addr_t信息,后6个字节表示相对自己后1个node的fil_addr ...

  7. [原]Unity3D深入浅出 - 物理材质(Physics Materials)

    在Unity3d中已经配置好了5种常用的物理材质,Bouncy.Ice.Metal.Rubber.Wood,在菜单中依次选择Assets - Import Package - Physics Mate ...

  8. x86、i386、i486、i586、i686和x86_64

    1.386与686 i386—几乎所有的X86平台,不论是旧的pentum或者是新的pentum-IV与K7系统CPU,都可以正常工作,i指得是Intel兼容的CPU,至于386就是CPU的等级.i5 ...

  9. 使用CSS3美化复选框checkbox

    我们知道HTML默认的复选框样式十分简陋,而以图片代替复选框的美化方式会给页面表单的处理带来麻烦,那么本文将结合实例带您一起了解一下使用CSS3将复选框checkbox进行样式美化,并且带上超酷的滑动 ...

  10. 我的WCF之旅(1):创建一个简单的WCF程序

    为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构.对那些对WCF不是很了解的读者来说,这个例 ...