今天看文章的时候,看到一段代码不是很理解,所以在这里求教下给。
文章地址:
https://www.cnblogs.com/azhai...
不理解的代码段:
docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
请问为什么上面的代码就可以求出根元素的font-size? 谢谢
今天看文章的时候,看到一段代码不是很理解,所以在这里求教下给。
文章地址:
https://www.cnblogs.com/azhai...
不理解的代码段:
docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
请问为什么上面的代码就可以求出根元素的font-size? 谢谢
1.什么是rem
来自于鹅厂ISUX团队的解释如下: rem(font size of the root element)是指相对于根元素的字体大小的单位。简单的说它就是一个相对单位。看到rem大家一定会想起em单位,em(font size of the element)是指相对于父元素的字体大小的单位。它们之间其实很相似,只不过一个计算的规则是依赖根元素一个是依赖父元素计算。
所以这里总结一句,所谓依赖根元素来计算的方式,就是先给予html元素一个font-size,然后我们所有的rem就根据这个font-size来计算
例如:
1
html{ font-size:16px;}
那么我们这里的1rem就应该这么来计算:1x16=16px=1rem;浏览器默认为16px可能造成rem计算上的麻烦和多位小数,所以,我们也可以进行这种方式的初始化根元素:
html{
font-size=62.5% //这里就是10/16x100%=62.5% 也就是默认10px的字号
}
这样初始化之后,我们来进行rem计算的时候,就会减少许多的麻烦。
这老哥这种操作我不是很懂,想让跟元素字体大小为10px,可以直接html{ font-size:10px;}
吧?为什么要先搞成16px再乘以62.5%?
回到你说的这个式子.
(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;<br> window.innerWidth>max ? window.innerWidth : max;
if (!clientWidth) return;
docEl.style.fontSize = 20 * (clientWidth / 320) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
320是定义的手机屏幕的最小宽度
clientWidth是document.documentElement.clientWidth
,也就是当前的窗口宽度.
他提到了当屏幕宽度为640的时候,默认跟节点字体大小为20px,不过这个js设置的是40px.
(当前屏幕宽度/320)*20
我们用console来验证一下.
> window.document.documentElement.clientWidth
384
> window.document.documentElement.clientWidth/320*20
24
这个事件在页面load和resize的时候触发,就是每次窗口变化就重置根节点字体大小,相当于更改了rem的长度,来实现页面适配.
他那个写法会把字体设置的比较大,可以理解为整个屏幕的宽度就是16rem.
实际上我是写后端的..有不对的地方请指出...
8 回答5k 阅读✓ 已解决
6 回答3.7k 阅读✓ 已解决
5 回答3k 阅读✓ 已解决
5 回答6.5k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
5 回答1.4k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
1:1
的比例。此时的font-size就是20,对不,相当于给了html的font-size一个默认值20px
。