首先介绍下自己,我是从后端转前端,对于前端的见识还不深望各位全当一个新手自述.......

随着移动设配的更新换代,市场上涌现了大量的非主流设备分辨率,比如华为手机......

更新换代快的大前提下自然又涌现出了适配问题,主流解决方案有很多,如响应式布局、cover布局、container布局 这几种布局在大多数情况下不限制高度的页面下还是相当有用的,但如果被元素塞满的设计稿并且客户要求设计稿的每一个元素都能动起来,每1p只能占据一屏的情况下,用上述方法就会有一些问题,例如错位,例如变形......

大背景介绍完上正题,在一系列的尝试下我选择了rem.js

1)rem.js的用法

用法很简单只需要像其他js一样引用就好了

rem.js下载地址https://github.com/amfe/lib-flexible/blob/master/src/flexible.js

或者直接在网页中插入

<script type="text/javascript">
!function(e,t){function n(){var n=l.getBoundingClientRect().width; t=t||540,n>t&&(n=t);var i=100*n/e*nm;r.innerHTML="html{font-size:"+i+"px;}"}var i,d=document,o=window,l=d.documentElement,r=document.createElement("style");if(l.firstElementChild)l.firstElementChild.appendChild(r);else{var a=d.createElement("div");a.appendChild(r),d.write(a.innerHTML),a=null}n(),o.addEventListener("resize",function(){clearTimeout(i),i=setTimeout(n,300)},!1),o.addEventListener("pageshow",function(e){e.persisted&&(clearTimeout(i),i=setTimeout(n,300))},!1),"complete"===d.readyState?d.body.style.fontSize="16px":d.addEventListener("DOMContentLoaded",function(e){d.body.style.fontSize="16px"},!1)}(750,750);
</script>

2)rem.js出现的问题或者说浏览器出现的一些问题

在app项目中,rem表现非常出色可以说几乎做到了全设备兼容的一个状态,但是网页需求除了在app中应用同样也有活动H5单页面的运用,同样在各大全面屏手机当中rem依然表现出色,而部分非全面屏如果在浏览器打开,如微信浏览器打开上面一大行将会显示标题,在安卓手机用默认浏览器打开有些还会出现上下都有空白,可见区域高度远远小于实际设备高度,此时我们就会发现如果内容很满的话,元素会发生重叠等现象

3)解决办法

出现这种问题很明显是可见高度小于期望高度,此时只需要添加一个系数就好了,下面以苹果5s,苹果6,7,8做个例子讲解下

<script>
var clienH=parseInt(document.documentElement.clientHeight);
var num;
var nm;
if(clienH<568){
// 苹果5s/se高度为568目前应该是用户群用的最小的屏,如果4s还是存在用户的话或者有更小的屏还在用的话根据实际情况做考虑.
num=parseInt(document.documentElement.clientHeight)/568;
nm= num>1 ? 1 : num;
console.log("5s");
}else if(568<=clienH<667){
// 苹果6,7,8设备高度667
num=parseInt(document.documentElement.clientHeight)/667;
nm= num>1 ? 1 : num;
console.log("6 7 8");
}else if(667<=clienH<736){
// 苹果6p,7p,8p设备高度736
num=parseInt(document.documentElement.clientHeight)/736;
nm= num>1 ? 1 : num;
console.log("6p 7p 8p");
}else{

nm=1

};

//再往上就是全面屏设配了rem对全面屏支持非常优秀不需要多余的操作
</script>

系数最大不能超过1超过1将会影响页面布局,所以上面做了个判断优化rem.js代码如下

<script type="text/javascript">
!function(e,t){function n(){var n=l.getBoundingClientRect().width; var clienH=parseInt(document.documentElement.clientHeight);var num;var nm;if(clienH<568){num=parseInt(document.documentElement.clientHeight)/568;nm= num>1 ? 1 : num;console.log("5s");}else if(568<=clienH<667){num=parseInt(document.documentElement.clientHeight)/667;nm= num>1 ? 1 : num;console.log("6 7 8");}else if(667<=clienH<736){num=parseInt(document.documentElement.clientHeight)/736;nm= num>1 ? 1 : num;console.log("6p 7p 8p");}else{nm=1}; t=t||540,n>t&&(n=t);var i=100*n/e*nm;r.innerHTML="html{font-size:"+i+"px;}"}var i,d=document,o=window,l=d.documentElement,r=document.createElement("style");if(l.firstElementChild)l.firstElementChild.appendChild(r);else{var a=d.createElement("div");a.appendChild(r),d.write(a.innerHTML),a=null}n(),o.addEventListener("resize",function(){clearTimeout(i),i=setTimeout(n,300)},!1),o.addEventListener("pageshow",function(e){e.persisted&&(clearTimeout(i),i=setTimeout(n,300))},!1),"complete"===d.readyState?d.body.style.fontSize="16px":d.addEventListener("DOMContentLoaded",function(e){d.body.style.fontSize="16px"},!1)}(750,750);
</script>

4)此处设定1rem=100px

如一个div {width:200px; height:300px;}样式写成div{width:2rem;height:3rem;}即可。。。。

-----------------------------------------------------------------------------------------------------------------------------------------------

祝各位同学前程似锦!

 

rem.js的用法及在浏览器端的适配的更多相关文章

  1. JS神经网络deeplearn.js:浏览器端机器智能框架

    JS神经网络deeplearn.js:浏览器端机器智能框架 通过 deeplearn.js,可以实现在浏览器中训练神经网络模型,也可在推理阶段运行预训练模型. deeplearn.js 以 TypeS ...

  2. 移动端屏幕适配(rem+js)

    什么是移动端适配 在制作webapp时,一个很关键的问题就是适配各种机型不同屏幕的大小,让每种机型上的布局看起来都尽量一样. 也就是说用同一套代码在不同分辨率的手机上跑时,页面元素间的间距.留白,以及 ...

  3. js IndexedDB:浏览器端数据库的demo实例

    IndexedDB具有以下特点. (1)键值对储存. IndexedDB内部采用对象仓库(object store)存放数据.所有类型的数据都可以直接存入,包括JavaScript对象.在对象仓库中, ...

  4. 如何让Node.js运行在浏览器端

    Node.js又称服务端JavaScript.今天我为了解决一个问题,通过搜索引擎找到了如何将Node.js转成浏览器端可以运行的javascript.尽管这种方式有其局限性,但是还是可以用的. 1. ...

  5. 浏览器端用JS实现创建和下载图片

    问题场景 在前端很多的项目中,文件下载的需求很常见.尤其是通过JS生成文件内容,然后通过浏览器端执行下载的操作.如图片,Execl 等的导出功能.日前,项目中就遇到了这类需求,在浏览器端实现保存当前网 ...

  6. 在浏览器端用JS创建和下载文件

    前端很多项目中,都有文件下载的需求,特别是JS生成文件内容,然后让浏览器执行下载操作(例如在线图片编辑.在线代码编辑.iPresst等). 但受限于浏览器,很多情况下我们都只能给出个链接,让用户点击打 ...

  7. 浏览器端JS导出EXCEL

    浏览器端JS导出EXCEL FileSaver.js 实现了在本身不支持 HTML5 W3C saveAs() FileSaver 接口的浏览器支持文件保存.FileSaver.js 在客户端保存文件 ...

  8. 移动端rem.js的使用方法

    下面的代码一是我根据rem的使用经验,自己写的一个rem.js,发现很好用,能适用所有移动端h5页面的自适应需求: 代码一: window.onload = function(){ /*720代表设计 ...

  9. 移动端rem.js使用方法

    下面的代码一是我根据rem的使用经验,自己写的一个rem.js,发现很好用,能适用所有移动端h5页面的自适应需求: 代码一: ``` window.onload = function(){ /*720 ...

随机推荐

  1. location.replace() keeps the history under control

    from https://dev.opera.com/articles/efficient-javascript Occasionally, it is necessary to change the ...

  2. (转)自制AutoMapper实现DTO到持久层Entity的转换

    原文地址:http://www.cnblogs.com/qidian10/p/3173907.html 项目中经常涉及到页面DTO更新,保存到数据库的操作,这就必然牵扯到DTO和持久层对象的转换,常见 ...

  3. vb.net 中 listview 中编辑 可以用 ComboBox 选择编辑数据

    Public Class ModifyLineData Dim mousePos As Point Dim pubListviewitem As ListViewItem Dim imgList As ...

  4. 树莓派_实现摄像头的拍照、监控与录像(Raspiberry PI Camera 5W)

    学无止境    前言:大家好,欢迎来到誉雪飞舞的博客园,我的每篇文章都是自己用心编写, 算不上精心但是足够用心分享我的自学知识,希望大家能够指正我,互相学习成长. 转载请注明:https://www. ...

  5. Multimap的初使用

    之前不知道这个类型使用,在朋友的推荐下进行了个实际操作. 类似这种查询,我需要将他们归类拿出来,如果招以前那么拿的话可能要套挺多个循环的. 首先根据查询得到一个 List<Map<Stri ...

  6. Java面向对象之构造代码块 入门实例

    一.基础概念 1.构造代码块,给所有对象进行初始化. 2.构造函数,只给对应的对象初始化. 3.局部代码块,控制局部变量的生命周期. 二.实例代码 class Person { private int ...

  7. 将php命令加入cenos环境变量

    0.修改/etc/profile文件使其永久性生效,并对所有系统用户生效,在文件末尾加上如下两行代码 1.PATH=$PATH:/usr/local/webserver/php/bin:/usr/lo ...

  8. javascript,图片框

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. [USACO10MAR]伟大的奶牛聚集 BZOJ 1827 树形dp+dfs

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...

  10. PAT天梯赛L3-015 球队食物链

    读题可以知道是DFS,注意一点,题目说的是赢过,所以str[i][j]=‘W',那么g[i][j]=1,str[i][j]='L',g[j][i]=1 然后就常规搜索即可,还有一点就是剪枝,如果没有可 ...