- 我们假设 1rem=20px; —> 屏幕宽375px
- height=50/20=2.5rem
- 1rem=40px; —> 屏幕宽750px
- height=100/40=2.5rem
- 得出: 1rem=(?/375)*20px=屏幕宽度
- 1rem = (document.documentElement.clientWidth / 375) * 20px;

<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> :root { font-size: 10px; } div { width: 1rem; height: 1rem; border: 1px solid red; } </style> </head> <body> <div></div> <script> window.onresize = setRemUnit setRemUnit() function setRemUnit() { let docEl = document.documentElement let viewWidth = docEl.clientWidth docEl.style.fontSize = (viewWidth / 375) * 10 + 'px' } </script> </body></html>
- rem总结:
- rem与html的字体大小是对应的,如果1rem=20px,那么就需要设置html的字体大小为20px;
- 如果设计稿是375px宽的,我们指定该宽度下1rem=20px,那么设计稿上40px的元素,就是2rem。
- 也就是说,在写页面的时候,要指定设计稿对应的页面内,1rem等于多少px,然后参考设计稿去计算元素是多少rem。当页面不是375px宽时,就需要根据页面的实际宽度来动态设置html的字体大小,这样元素就会跟随视口的宽度来进行缩放了。