博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
rem和px
阅读量:4481 次
发布时间:2019-06-08

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

做过一段时间的H5页面,但是对于rem与px的换算还是比较模糊,总是引用一段脚本,也没有深究过为什么,就稀里糊涂的用了,遇到一些细微的地方,总是不知道是什么原因导致的,我总是只要能完成效果就行,全然不顾其他。下面来说说我常用的一段js脚本(从网上搜的)

(function (doc, win) {            var docEl = doc.documentElement,                resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',                recalc = function () {                    var clientWidth = docEl.clientWidth;//获取当前屏幕大小                    if (!clientWidth) return;                    if(clientWidth>=640){                        docEl.style.fontSize = '100px';                    }else{                        docEl.style.fontSize = 100 * (clientWidth / 640) + 'px';                    }                };                    if (!doc.addEventListener) return;            win.addEventListener(resizeEvt, recalc, false);            doc.addEventListener('DOMContentLoaded', recalc, false);})(document, window)

说说这段代码干了什么?

首先orientationchange事件是当终端方向发生改变时触发的事件,详细请看,

resize事件是当浏览器窗口大小发生变化时触发的事件,详细请看

当前屏幕大小大于等于640的时候,统一设置html的font-size为100px;否则用100/(当前屏幕宽度/640),给window绑定此方法;总的,这段代码就是通过获取不同屏幕的大小,设置根元素的font-size。

注意:这里为什么以640作为分界线,我到目前还不是很明白,猜测大概是1物理像素=2设备独立像素,以iphone5的宽度作为基数*2得来的。希望网友可以解答我的疑问。

还有,从网上看到一些物理像素、设备独立像素、ppi(像素密度)等的换算,看的稀里糊涂,需要静下心来仔细研究下了。

/** * YDUI 可伸缩布局方案 * rem计算方式:设计图尺寸px / 100 = 实际rem  【例: 100px = 1rem,32px = .32rem】 */!function (window) {    /* 设计图文档宽度 */    var docWidth = 750;    var doc = window.document,        docEl = doc.documentElement,        resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize';    var recalc = (function refreshRem () {        var clientWidth = docEl.getBoundingClientRect().width;        /* 8.55:小于320px不再缩小,11.2:大于420px不再放大 */        docEl.style.fontSize = Math.max(Math.min(20 * (clientWidth / docWidth), 11.2), 8.55) * 5 + 'px';        return refreshRem;    })();    /* 添加倍屏标识,安卓为1 */    docEl.setAttribute('data-dpr', window.navigator.appVersion.match(/iphone/gi) ? window.devicePixelRatio : 1);    if (/iP(hone|od|ad)/.test(window.navigator.userAgent)) {        /* 添加IOS标识 */        doc.documentElement.classList.add('ios');        /* IOS8以上给html添加hairline样式,以便特殊处理 */        if (parseInt(window.navigator.appVersion.match(/OS (\d+)_(\d+)_?(\d+)?/)[1], 10) >= 8)            doc.documentElement.classList.add('hairline');    }    if (!doc.addEventListener) return;    window.addEventListener(resizeEvt, recalc, false);    doc.addEventListener('DOMContentLoaded', recalc, false);}(window);

之前同事给的代码,说比上面那段代码好用,还没用

 

转载于:https://www.cnblogs.com/wj19940520/p/6951419.html

你可能感兴趣的文章
java笔记--适配器模式的运用
查看>>
C#与数据结构--图的遍历
查看>>
ispy 编译笔记
查看>>
bzoj1067——SCOI2007降雨量(线段树,细节题)
查看>>
day 1
查看>>
洛谷P1282 多米诺骨牌【线性dp】
查看>>
数据类型的提升(promotion)
查看>>
Thead是不能返回值的,但是作为更高级的Task当然要弥补一下这个功能。
查看>>
Android呼叫转移跳转到拨号盘 “#”号显示不出来
查看>>
Python中的生成器与yield
查看>>
JQuery 的Bind()事件
查看>>
Maven 常用配置
查看>>
Objects源码解析
查看>>
video
查看>>
栈的c语言顺序实现(动态申请空间)
查看>>
【转】 Pro Android学习笔记(六七):HTTP服务(1):HTTP GET
查看>>
获取子iframe框架的元素
查看>>
WordCount bug修复录
查看>>
承载进程 (vshost.exe)
查看>>
[转]WPF MVVM 实战
查看>>