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

    需求:

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

  • 相关阅读:
    SVN自动更新测试服务器工作副本(C#写winform程序实现)
    两台服务器上SQL Server数据库数据互操作示例
    ASP.NET根据URL生成网页缩略图示例程序(C#语言)
    Flutter Widget API
    BPM、BPMN、BPMN2.0概念介绍
    H5多图上传调研
    lIUNX如何加载U盘,光盘
    如何解决exchange2003被中继的问题?(网上转载)
    window无法安装服务
    如何在WORD里面插入不同的页眉和页脚
  • 原文地址:https://www.cnblogs.com/le220/p/8297225.html
Copyright © 2011-2022 走看看