需求:

在不同的移动终端设备中实现,UI设计稿的等比例适配。

方案:

布局排版都用rem做单位,然后不同宽度的屏,js动态计算根节点的font-size。

假设设计稿是宽750px来做的,书写css方便计算考虑,根节点的font-size假定为100px,得出设备宽为7.5rem。设计稿中标注的任何px数值都可以换算成px/100的rem值。

就是说,每一个设备的宽度都定为7.5个rem,然后宽度非750px的设备里,就需要用JS对font-size做动态计算。

换算关系为:根节点的font-size=设备宽度/7.5。

即:document.documentElement.style.fontSize = document.documentElement.clientWidth*(window.devicePixelRatio||1) / 7.5 + 'px';

注:需要考虑到dpr,即一倍屏两倍屏的问题。

http://mobile.51cto.com/web-484304.htm

备注:

每个浏览器对最小font-size的支持,不尽相同。js动态计算的font-size值太小时,会导致超小屏上UI显示效果比预想中的偏大。

比如,font-size计算是10px,但是chrome只支持到12px,他就按照12px去渲染了,这就会导致UI偏大了。(上面方案中的100px肯定是没有问题的)

具体表现:

浏览器 最小支持font-size

PC chrome 12px (可以通过安装Advanced Font Settings插件支持到6px)

Android和iOS 1px(只测试了主流浏览器,未做充分测试)

cordova(Android和iOS) 9px

//orientationchange方向改变事件

(function (doc, win) {

var docEl = doc.documentElement,//根元素html

//判断窗口有没有orientationchange这个方法,有就赋值给一个变量,没有就返回resize方法。

resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',

recalc = function () {

var clientWidth = docEl.clientWidth;

if (!clientWidth) return;

//把document的fontSize大小设置成跟窗口成一定比例的大小,从而实现响应式效果。

docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';

};

//alert(docEl)

if (!doc.addEventListener) return;

win.addEventListener(resizeEvt, recalc, false);//addEventListener事件方法接受三个参数:第一个是事件名称比如点击事件onclick,第二个是要执行的函数,第三个是布尔值

doc.addEventListener('DOMContentLoaded', recalc, false)//绑定浏览器缩放与加载时间

})(document, window);

//alert(document.documentElement.clientWidth/320)

最新文章

  1. 4-3 管理及IO重定向
  2. vim中执行shell命令
  3. oracle exists
  4. ORA-12518,TNS:listener could not hand off client connection
  5. Oracle ->> 查看分区表的每个分区的数据行分布情况
  6. Andriod x86 4,4
  7. 排序算法FOUR:堆排序HeapSort
  8. php数组操作函数
  9. C# Coding & Naming Conventions
  10. Java中常见的几种类型转换
  11. autotools入门笔记(一)
  12. Jenkins SSH timeout
  13. var与let的区别
  14. 将展示内容(div、iframe)放在Expand控件中
  15. js 递归修改json无限级key值
  16. 和初学者交流学习java语言一些体会。
  17. 转载--关于hdfs
  18. asyncio之asyncio.run
  19. Go语言之函数签名
  20. c++类对象的内存分布

热门文章

  1. 20155325 2016-2017-2 《Java程序设计》第十周学习总结
  2. 2017-2018-1 20155330《信息安全技术》实验二——Windows口令破解
  3. python 多线程笔记(4)-- 车站售票模拟
  4. 【LG3206】[HNOI2010]城市建设
  5. java 文件过滤
  6. 无旋treap的区间操作实现
  7. angular 缓存模板 ng-template $templateCache
  8. 面试之HTTP基础(不断完善中)
  9. Qt-Qt5最新增加程序图标方式
  10. Jmeter接口测试(九)授权