这里使用了js控制根元素的font-size大小,然后进行rem换算,在js代码后面会说明以下问题。

1.如何进行rem运算?

2.如果纯js控制根元素用rem布局会出现的小问题,如何解决?

3.如有欠缺的地方,大神们可以指出错误或者改进。

function intiSize(){
//获取当前浏览器窗口宽度(这里的实质就是body宽度)
var win_w=document.body.offsetWidth;
//定义变量
var fontSize;
if(win_w>640){
fontSize=24;
}else{
//如果浏览器窗口宽度(这里的实质就是body宽度)值小于320,取320
win_w=Math.max(320,win_w);
fontSize=win_w/320*12
}
//设置根元素的大小
document.getElementsByTagName('html')[0].style.fontSize=fontSize+'px';
}
//浏览器窗口宽度发生变化时条用这个函数,方便与改变窗口大小时候调试
onresize=intiSize;
intiSize();

1.这段代码是基于640px的设计稿,基于640设计说明(明白了640怎么换算,720设计稿原理一样,替换以下JS代码里面的数字或者用传参的方式调用函数)

假设我们拿到一张640的设计稿,有一个div宽度为200px,高度100px;你在640的页面去布局时,因为根元素取24px,把width值转换为rem可以直接用设计稿div的宽度除以24,200/24rem=8.33333333rem(当然是除不尽的,精确度建议保留8个小数点),而同理,高度height=100/24rem=4.16666667rem,这样布局可以很精确还原设计稿,当然最后推荐使用计算器。

2.纯js控制会一个页面加载时候,知道加载完毕会出现由大变小的问题,这个是因为先加载页面然后再加载js,当没加载完这段js,函数没被调用,会出现很大字体或者图片很大,等JS加载完毕后,瞬间变回正常,这样会影响用户体验,这里有两个解决方法,

一、像淘宝移动端那样,页面没加载完毕前显示一个loading页面,加载完毕后再显示内容。

二、把加入一个css媒体查询样式表,页面先加载样式再加载内容,用css样式表去控制你的页面布局和js精确控制的布局偏差尽量降低到最小,这样加载完时候因为微小偏差的还原到精确的布局,这时候发生的变化非常微小(只有一个px左右的偏差)肉眼很难以看出(亲测实用),下面我贴出平时实用的css样式表,两张混合实用,移动端布局的问题得以完美的解决。

@charset "utf-8";
/* CSS Document */ /* ---------- Responsive accurate ---------- */
@media (min-width:640px){
html{font-size:24px;}
}
}
@media (min-width:631px) and (max-width:639px){html{font-size:23.66px;}}
@media (min-width:622px) and (max-width:630px){html{font-size:23.33px;}}
@media (min-width:613px) and (max-width:621px){html{font-size:23px;}}
@media (min-width:604px) and (max-width:612px){html{font-size:22.66px;}}
@media (min-width:595px) and (max-width:603px){html{font-size:22.33px;}}
@media (min-width:586px) and (max-width:594px){html{font-size:22px;}}
@media (min-width:577px) and (max-width:585px){html{font-size:21.66px;}}
@media (min-width:568px) and (max-width:576px){html{font-size:21.33px;}}
@media (min-width:559px) and (max-width:567px){html{font-size:21px;}}
@media (min-width:550px) and (max-width:558px){html{font-size:20.66px;}}
@media (min-width:541px) and (max-width:549px){html{font-size:20.33px;}}
@media (min-width:533px) and (max-width:540px){html{font-size:20px;}}
@media (min-width:524px) and (max-width:532px){html{font-size:19.66px;}}
@media (min-width:515px) and (max-width:523px){html{font-size:19.33px;}}
@media (min-width:506px) and (max-width:514px){html{font-size:19px;}}
@media (min-width:497px) and (max-width:505px){html{font-size:18.66px;}}
@media (min-width:488px) and (max-width:496px){html{font-size:18.33px;}}
@media (min-width:480px) and (max-width:487px){html{font-size:18px;}}
@media (min-width:471px) and (max-width:479px){html{font-size:17.66px;}}
@media (min-width:462px) and (max-width:470px){html{font-size:17.33px;}}
@media (min-width:453px) and (max-width:461px){html{font-size:17px;}}
@media (min-width:444px) and (max-width:452px){html{font-size:16.66px;}}
@media (min-width:435px) and (max-width:443px){html{font-size:16.33px;}}
@media (min-width:426px) and (max-width:434px){html{font-size:16px;}}
@media (min-width:417px) and (max-width:425px){html{font-size:15.66px;}}
@media (min-width:408px) and (max-width:416px){html{font-size:15.33px;}}
@media (min-width:400px) and (max-width:407px){html{font-size:15px;}}
@media (min-width:391px) and (max-width:399px){html{font-size:14.66px;}}
@media (min-width:382px) and (max-width:390px){html{font-size:14.33px;}}
@media (min-width:374px) and (max-width:381px){html{font-size:14px;}}
@media (min-width:365px) and (max-width:373px){html{font-size:13.66px;}}
@media (min-width:356px) and (max-width:364px){html{font-size:13.33px;}}
@media (min-width:347px) and (max-width:355px){html{font-size:13px;}}
@media (min-width:338px) and (max-width:346px){html{font-size:12.66px;}}
@media (min-width:329px) and (max-width:337px){html{font-size:12.44px;}}
@media (max-width:328px){html{font-size:12px;}}

3.如果有更加多好的想法和建议,留下你的评论,让更加多人看到移动端布局应该怎么去改进,指出不足之处,我会加以改进并说明~

4.最后:或者这里换算有些麻烦,要用计算机器去计算,当然,当你掌握了这种布局方式,移动布局会用的很爽!

一看就懂得移动端rem布局、rem如何换算的更多相关文章

  1. 个人收藏的移动端网页布局rem解决方案

    写移动端项目时,总是会纠结是用css3 media query 还是用rem.移动端框架挺多,但是因为项目都比较小,不考虑使用. 无意在网上找到一个移动端rem布局的解决方案,经个人实践,目前未出现什 ...

  2. 移动端自适应布局 rem方案

    1.viewport.js (function(window, document) { // 给hotcss开辟个命名空间,别问我为什么,我要给你准备你会用到的方法,免得用到的时候还要自己写. con ...

  3. 移动端rem布局和百分比栅格化布局

    移动端的rem: 使用方法: 设置html的font-size,根据浏览器分辨率缩放 设置根元素font-size为100px这样好用的值,不要设为10px这样的: 然后获取浏览器的分辨率,也就是视口 ...

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

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

  5. 移动端rem布局(阿里)

    该方案使用相当简单,把下面这段已压缩过的 原生JS(源码已在文章底部更新,2017/5/3) 放到 HTML 的 head 标签中即可(注:不要手动设置viewport,该方案自动帮你设置) < ...

  6. 第132天:移动web端-rem布局(进阶)

    rem布局(进阶版) 该方案使用相当简单,把下面这段已压缩过的 原生JS(仅1kb,源码已在文章底部更新,2017/5/3) 放到 HTML 的 head 标签中即可(注:不要手动设置viewport ...

  7. 关于移动端 rem 布局的一些总结

    [资源一]基础知识恕不回顾 基础知识参考以下两篇博客: http://isux.tencent.com/web-app-rem.html http://www.w3cplus.com/css3/def ...

  8. 移动端页面开发适配 rem布局原理

    主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...

  9. 移动端布局 - REM方式

    默认以宽度为640px的设计稿为基准页面,然后通过JS获取当前显示设备的尺寸,对应的调整 html 标签的font-size大小,从而实现通过以rem为单位的移动端布局适配. 具体代码 (functi ...

随机推荐

  1. 从零开始,教你用Webpack构建React基础工程

    参考 http://www.jianshu.com/p/4df92c335617

  2. Struts2:MyEclippse中使用struts-default.xml中定义的拦截器(timmer,logger)

    环境:MyEclipse 2015 Stable 2.0:struts2-core-2.3.16.1.jar等 struts.xml <struts> <package name=& ...

  3. OCR图像识别技术-Asprise OCR

    // csc AspriseDemo.cs /r:AspriseOcr.dll // 注意注册:AspriseOCR.InputLicense("123456", "12 ...

  4. Linux学习四:UDP编程(上)

    关于UDP和TCP对比优缺,这里就不说了. 使用UDP代码所掉用的函数和用于TCP的函数非常类似,这主要因为套接口库在底层的TCP和UDP的函数上加了一层抽象,通过这层抽象使得编程更容易,但失去了一些 ...

  5. MFC 自绘按钮 消息响应

    单检测到按下消息时,发送一个消息 m_pParent->PostMessage(WM_COMMAND, IDC_BUTTON1); 然后再在消息映射里建立映射. ON_COMMAND(IDC_B ...

  6. JUC.Condition学习笔记[附详细源码解析]

    目录 Condition的概念 大体实现流程 I.初始化状态 II.await()操作 III.signal()操作 3个主要方法 Condition的数据结构 线程何时阻塞和释放 await()方法 ...

  7. Spring boot开发过程遇到的一些小问题

    1.无法将yml文件自动注入到对应的类的实例中去: pom.xml文件里没有加如下依赖 <dependency> <groupId>org.springframework.bo ...

  8. html5 弹框 可用于安卓手机弹出输入框

    function text() { name=prompt("请输入wifi密码"); // 弹出input框 prompt('提示语','默认输入框字段') //alert(na ...

  9. JS動態綁定下拉單內容

    function req00_Line1_onChange(obj) {     //if ($(obj).val() != "" && $(obj).val() ...

  10. PHP连接MySQL的时候报错SQLSTATE[HY000] [2002] No such file or directory

    错误环境:Mac OS 10.10 找到mysql.sock文件的位置 $sudo find / -name mysql.sock ------结果如下---------- find: /dev/fd ...