zoukankan      html  css  js  c++  java
  • js+rem动态计算font-size的大小,适配各种手机设备!

    转载: http://www.jianshu.com/p/afbf518cc891

    需求:

    在不同的移动终端设备中实现,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)

  • 相关阅读:
    java日常问题和技巧1(BigDecimal与int相互转换、判断某元素是否在数组中、求两个List并集、int[]转Integer[])
    窗口小部件基础编写V1.0----没有Service
    使用MyBatis遇到的问题及解决方法(一)(持续更新)
    java工具类集合(一)
    idea部分操作(一)----持续更新
    单向链表(篇九)
    结构体(篇八)
    指针与字符串(篇七)
    数组字符串(篇六)
    循环与函数(篇五)
  • 原文地址:https://www.cnblogs.com/lrr0618/p/6626471.html
Copyright © 2011-2022 走看看