博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第148天:js+rem动态计算font-size的大小,适配各种手机设备
阅读量:7121 次
发布时间:2019-06-28

本文共 1516 字,大约阅读时间需要 5 分钟。

需求:

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

转载于:https://www.cnblogs.com/le220/p/8297225.html

你可能感兴趣的文章
LeetCode-326. Power of Three
查看>>
HDU 5305 Friends dfs
查看>>
【Swift】iOS UICollectionView 计算 Cell 大小的陷阱
查看>>
Windows Azure 入门系列课程Windows Azure 入门系列课程
查看>>
VK Cup 2016 - Round 1 (Div. 2 Edition) A. Bear and Reverse Radewoosh 水题
查看>>
成都Uber优步司机奖励政策(3月31日)
查看>>
jquery通过ajax方法获取json数据不执行success
查看>>
字符数组转换成数字
查看>>
URL,URLConnection,HttPURLConnection的使用
查看>>
PHP对象和接口抽象类注意事项
查看>>
转: android apk 防止反编译技术(1~5连载)
查看>>
[唐诗]古风(其三十一)-李白
查看>>
触发器创建删除等操作
查看>>
Java版 数字金额大写转换
查看>>
Linux性能及调优指南(翻译)
查看>>
C#.Net 如何动态加载与卸载程序集(.dll或者.exe)0-------通过应用程序域AppDomain加载和卸载程序集...
查看>>
坑系列 —— 缓存+哈希=高并发?
查看>>
VS调试异常代码 HRESULT:0x80070057 (E_INVALIDARG)解决方法
查看>>
ASP.NET Core 中文文档 第二章 指南(4.10)检查自动生成的Detail方法和Delete方法
查看>>
PHP程序员学习路线
查看>>