Open hushicai opened 6 years ago
什么是rem?
rem作用于非根元素时,相对于根元素字体大小;rem作用于根元素字体大小时,相对于其出初始字体大小——MDN
rem布局的本质是等比缩放!
如果让html元素的字体大小恒等于屏幕宽度的1/100,那么1rem就等价于屏幕宽度的1%,因此rem可以实现可伸缩布局。
rem只适用于固定尺寸元素,但又希望该元素在不同设备上可以等比缩放。
文本不建议使用rem,因为其字体大小和字体宽度并不成线性关系;另外,用户使用更大的屏幕,更多时候是想看到更多的内容,而不是更大的字,所以文本不推荐使用rem。
rem布局方案:
一般情况下,n 是一个经验值,可以有不同的方法,例如10、15、16、100等都可以,但是需要考虑到浏览器的最小字体限制。
一般可以从视觉稿角度出发来计算 n :
n = 视觉稿宽度 / 100
注:等分为100份, 主要是为了以后能更方便地兼容vw/vh。
例如:
750px视觉稿,n = 750 / 100 = 7.5 640px视觉稿,n = 640 / 100 = 6.4
假设我们现在拿到了一个宽度为750px的视觉稿,那么 n = 750 / 100 = 3.75,代入上述rem计算公式,则视觉稿上200px的元素等于200 / 750 * 7.5 = 2rem。
但上面计算出来的是视觉稿上的像素,如果要转换到css像素,还需要考虑dpr。
一般情况下,我们会以750px的视觉稿为准进行布局,n还要再除以dpr,n = n / dpr = n / 2 = 3.75。
n = n / dpr = n / 2 = 3.75
最终,视觉稿上200px的元素就转换为css像素等于200 / 750 * 3.75 = 1rem。
JS基本代码如下:
(function() { function rem() { let width = document.documentElement.clientWidth; let fontSize = width / 3.75; document.documentElement.style.fontSize = fontSize + 'px'; } window.onresize = rem; rem(); })();
什么是rem?
rem布局的本质是等比缩放!
rem只适用于固定尺寸元素,但又希望该元素在不同设备上可以等比缩放。
文本不建议使用rem,因为其字体大小和字体宽度并不成线性关系;另外,用户使用更大的屏幕,更多时候是想看到更多的内容,而不是更大的字,所以文本不推荐使用rem。
rem布局方案:
一般情况下,n 是一个经验值,可以有不同的方法,例如10、15、16、100等都可以,但是需要考虑到浏览器的最小字体限制。
一般可以从视觉稿角度出发来计算 n :
注:等分为100份, 主要是为了以后能更方便地兼容vw/vh。
例如:
假设我们现在拿到了一个宽度为750px的视觉稿,那么 n = 750 / 100 = 3.75,代入上述rem计算公式,则视觉稿上200px的元素等于200 / 750 * 7.5 = 2rem。
但上面计算出来的是视觉稿上的像素,如果要转换到css像素,还需要考虑dpr。
一般情况下,我们会以750px的视觉稿为准进行布局,n还要再除以dpr,
n = n / dpr = n / 2 = 3.75
。最终,视觉稿上200px的元素就转换为css像素等于200 / 750 * 3.75 = 1rem。
JS基本代码如下:
参考文章