最终可实现:例如宽 20px 的图,就可以写成 0.2rem ; 公式为20px/100=0.2rem;

var rootResize=function(){var baseFontSize = 100;var baseWidth = 640;var minWidth=320;var clientWidth = document.documentElement.clientWidth || window.innerWidth;var innerWidth = Math.max(Math.min(clientWidth, baseWidth), minWidth);var rem = clientWidth/(baseWidth/baseFontSize);if(innerWidth==640||innerWidth==320){rem=innerWidth/(baseWidth/baseFontSize)}document.querySelector('html').style.fontSize = rem + 'px';};
rootResize();
window.οnresize=function(){rootResize()};

解析代码:(针对手机端)

documentElement.clientWidth
window.innerWidth

先解释下

documentElement:

返回HTML DOM中的ROOT节点 即 ; 菜鸟网解释与案例

documentElement.clientWidth:

window.innerWidth:

Element.clientWidth 属性表示元素的内部宽度,以像素计。该属性包括内边距,但不包括垂直滚动条(如果有)、边框和外边距。

window.innerWidth:

浏览器视口(viewport)宽度(单位:像素),如果存在垂直滚动条则包括它。

我们用代码验证下:

<html >
<head><meta charset="UTF-8"><title>Title</title><meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
</head>
<body>
<div style="border: 10px #7f7f7f solid;"><p style="background: #fe9901" id="demo1">显示值</p><p style="background: #d76342" id="demo2">显示值</p><p style="background: #fe9901" id="demo3">显示值</p><button οnclick="Click1()">body</button><button οnclick="Click2()">html</button><button οnclick="Click3()">p</button>
</div>
</body>
<script>// var mybody = document.body.clientWidth;var myhtmlto = document.documentElement.clientWidth;var myhtml = window.innerWidth;var myp = document.getElementById("demo3").clientWidth;/* function Click1 (){var mby=document.getElementById("demo1");mby.innerHTML=mybody+"---document.body.clientWidth;";}*/function Click1 (){var diy=document.getElementById("demo1");diy.innerHTML= myhtmlto+"---document.body.clientWidth;";}function Click2(){var diy =document.getElementById("demo2");diy.innerHTML=myhtml+"---window.innerWidth;";}function Click3(){var diy =document.getElementById("demo3");diy.innerHTML=myp+"---getElementById(\"demo3\").clientWidth;";}
</script>
</html>

针对手机端, 所以设置

<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">

运行结果:

document.documentElement.clientWidth / window.innerWidth;   都是获取的HTML宽度。
document.getElementById("demo3").clientWidth; 当.clientWidth 定位到P标签宽度时,只计算内边距宽度,不计算边框.

打开 document.body.clientWidth; 当P标签没有外边框的时候 body宽度等于P标签宽度, body和HTML宽度不相等,相差得数值 就不做深究了。

剩下的我就重点说一下clientWidth/(baseWidth/baseFontSize); 这个公式的意义。

首先当把HTML font-size:设置多少。 1rem 就等于 多少;

<html>
<head><meta charset="UTF-8"><title>Title</title>
</head>
<style>html{font-size: 100px;}
</style>
<body>
<p style="background: #fe9901;width: 1rem;" id="demo3">显示值</p>
<button οnclick="Click3()">p</button>
<script>var myp = document.getElementById("demo3").clientWidth;function Click3(){var diy =document.getElementById("demo3");diy.innerHTML=myp+"px我的宽度";}
</script>
</body>
</html>

大家自己动手改下数值验证一下, 也可以切换模拟器宽度,是不受模拟器宽度影响的。

clientWidth 变量=实际手机窗口宽度。 baseWidth=640px; baseFontSize=100px;

换个方法大家就一眼看懂了。 640px/100px = 实际手机窗口宽度/ 实际手机HTML:font-size;代码是rem 我用 实际手机HTML:font-size 代替便于大家理解。 等式的意义就是, 当窗口为640PX font-size设置为100PX 时 1rem=100px 。 那当实际手机窗口宽度为比如:320 时, 那么实际手机的font-size我改设置多少呢。 这个等式最后求出的 实际手机font-size 目的就是按照100PX=1rem这个关系来动态的换算我们的rem;不受实际窗口宽度变化影响。

剩余没讲解的代码 都比较清晰易懂,大家动手查查吧!

px转rem的详细解释和用法相关推荐

  1. C语言学习——sprintf函数详细解释及其用法

    函数功能: 把格式化的数据写入某个字符串 头文件: stdio.h 函数原型: int sprintf( char *buffer, const char *format, [ argument] - ...

  2. MATLAB中的eps的详细解释及用法

    (1)首先,eps是一个函数,它表示的是一个数可以分辨的最小精度.默认时它表示1到它下一个浮点数之间的距离的一半,而正好等于最大小于1的浮点数到最小大于1的浮点数之间的距离.eps=2.2204e-1 ...

  3. ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略

    ML之sklearn:sklearn.metrics中常用的函数参数(比如confusion_matrix等 )解释及其用法说明之详细攻略 目录 sklearn.metrics中常用的函数参数 con ...

  4. MATLAB中var函数,mean函数的含义及用法详细解释

    MATLAB中var函数,mean函数的含义及用法详细解释 var函数语句 我们先来看var函数,MATLAB命令窗输入help var ,可以得到用到方差函数Syntax有: V = var(X); ...

  5. linux usermod用法,Linux中的usermod命令的详细解释

    在Linux系统中,usermod命令的主要功能是修改用户账户,下面由学习啦小编为大家整理了linux下的usermod命令的详细解释,希望对大家有帮助! Linux中的usermod命令的详细解释 ...

  6. linux mkdir命令用法,linux中的mkdir命令的详细解释

    linxu下的mkdir命令从字面上就可以理解其实是创建文件或者目录的意思.下面由学习啦小编为大家整理了linux的mkdir命令的详细解释的相关知识,希望对大家有帮助! 一.linux中的mkdir ...

  7. Vue项目自动转换 px 为 rem,高保真还原设计图

    技术栈 vue-cli:使用脚手架工具创建项目. postcss-pxtorem:转换px为rem的插件. 自动设置根节点html的font-size 因为rem单位是相对于根节点的字体大小的,所以通 ...

  8. html5变动标签新写法,Html5新标签解释及用法

    Html5新标签解释及用法 发布时间:2012-02-17 22:50:45   作者:佚名   我要评论 HTML 5 是一个新的网络标准,目标在于取代现有的 HTML 4.01, XHTML 1. ...

  9. 网络管理:超级详细Tcpdump 的用法

    第一种是关于类型的要害字,主要包括host,net,port, 例如 host 210.27.48.2,指明 210.27.48.2是一台主机,net 202.0.0.0 指明 202.0.0.0是一 ...

最新文章

  1. js控制Iframe 和 iframe与主页的交互,传值 (转载)
  2. java基础-可执行jar包
  3. 安全性问题(数据篡改(拿到别人的URL,篡改数据(金额)发送给系统))
  4. 3D Human相关研究总结:人体、姿态估计、人体重建等
  5. boost :: hash_combine从类的不同成员生成哈希值
  6. Window VMWare中Centos虚拟机ifconfig命令不显示ens33
  7. 电梯设计需求调研报告
  8. Cloud Foundry 2018欧盟峰会日程已确定
  9. 【爱心2】JAVA表白代码——“LOVE“
  10. RubyOnRails 在linux平台安装的过程
  11. ios yylabel 加载html,iOS关于YYLabel的富文本点击事件
  12. html实现字体加边框及填充
  13. K3S配置IPV6环境
  14. Bootstrap 对齐方式
  15. Java 版本中文数字转阿拉伯数字实现
  16. oracle deadlock with TM lock in SX/SSX mode
  17. 【期末复习】技术经济学(南邮储成祥)
  18. [1609.04802] SRGAN中的那些loss
  19. 微信小程序 发布后强制更新版本 强制覆盖老版本
  20. 00后专访:我是如何初中毕业年仅16岁便踏入北漂码农行业的(一)

热门文章

  1. NetApp ONTAP Select 混合云存储解决方案
  2. python爬虫——BeautifulSoup库函数find_all()
  3. Qt Creator配置Intel IPP库并实现信号带通滤波
  4. android多音频输出,基于Android车载系统的多路音频输出的方法、装置及系统与流程...
  5. HTML5 em标签:定义文字斜体
  6. 定位技术-定位模块(u-blox)
  7. u盘安装纯净版xp(xp安装光盘)非ghost版xp
  8. 关于uni-app的Picker选择器默认选择的问题
  9. 【转载】SARscape5.4/5.4.1新功能
  10. 快捷键个人使用积累(更新ing)