移动端的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. C3p0/元数据/内省-Bean/自定义查询封装类/查询/分页

    c3p0连接池(C3p0连接池,只有当用户获取连接时,才会包装Connection.) 第一步:导入c3p0 第二步:在classpath目录下,创建一个c3p0-config.xml 第三步:创建工 ...

  2. HTML5学习(十一)---服务器发送事件

    参考教程:http://www.w3school.com.cn/html5/html_5_serversentevents.asp HTML5 服务器发送事件(server-sent event)允许 ...

  3. bzoj4028

    一眼分块题…… 分块,维护每个块的总的gcd和xor和 先思考我们应该怎么查询,考虑到gcd是一个神奇的东西,因为它最多变化logX次 于是我们从前往后扫描每个块,如果一个块内总的gcd是当前扫描的前 ...

  4. bzoj4525: [Usaco2016 Jan]Angry Cows

    二分. #include<cstdio> #include<algorithm> #include<cstring> using namespace std; + ...

  5. [Unity3d]小地图的制作

    继续今天的学习心得,unity中小地图的制作,实现了小地图中红色小箭头代表场景中的主角,然后人物方向的转变,小地图中箭头也随之改变方向. 效果图     右上角就是小地图,上面有个红色小箭头就是代表主 ...

  6. 【CSS】

    12个很少被人知道的CSS事实 通过CSS禁止Chrome自动为输入框添加橘黄色边框http://www.solagirl.net/override-chromes-automatic-border- ...

  7. java.sql.DataTruncation: Data truncation

    问题一: 用jdbc插入数据时,当数据库表中某列设置的长度小于要插入的字符的实际长度时就会抛出此异常. 如:数据表中某列char [4],长度为4,插入:"Hello"时,字符&q ...

  8. Ext入门学习系列(五)表格控件(1)

    上节学习了Ext面板控件,为后面的各个控件学习奠定基础,在此基础上本章将学习网络开发最期待的功能——表格控件. 我们都知道网络编程语言中,除了.net其他的基本没有提供网格控件,而最近的asp.net ...

  9. HDU 2289 Cup

    Cup Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  10. BinaryReader和BinaryWriter的leaveOpen参数 z

    在.NET 4.5后,微软为BinaryWriter和BinaryReader类型的构造函数中加入了leaveOpen参数,当该参数为true后,BinaryReader或者BinaryWriter关 ...