rem布局的原理

rem的布局原理

一、什么是rem?
rem是css的一个相对单位,他是相对于html的根元素

例如:html{font-size:16px;} p{font-size:1rem;} 那么段落的字体大小为16像素

二、怎么根据屏的大小做到自适应的?
自适应的原理:
*可以通过检测屏幕大小改变html的字体大小,从而实现自适应的大小效果*
获取设备宽度与设计搞的宽度的设计比例,作为html font-size的大小;假如是750/750,那么font-size:1px;设计搞上200px;这样写太大了,通常750/750,多除以100作为px的转换rem的换算比例;100px=1rem;那么设计稿上750px;代码里面就要写成7.5rem;

 (function (designWidth,n){
        function getRem() { 
            var html = document.getElementsByTagName("html")[0];
            var deviceWidth = document.body.clientWidth || document.documentElement.clientWidth;
            var rem = deviceWidth / designWidth * n;
            console.log(rem)
            html.style.fontSize = rem + "px";
         }
         getRem();
         //监听事件通过resize,只要屏幕发生改变,就会触发resize事件
         window.addEventListener('resize',function () { 
             getRem();
          })
    })(750,100);
  • 设计稿为750px的时候,html{font-size:50px;}50px * 7.5 = 375px;正好是设备的宽度;
  • 当设计稿750px,设备320px时,320/750*100 = 42.6666667;42.66667 *7.5 = 320px;
  • 所以当设备为375时 7.5rem是maxWidth,设备是320时,7.5rem也是maxWidth,这样就达到了自适应设备的目的;

三、下面我用代码演示一下

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>rem布局原理</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        header {
            width: 100%;
            height: 1rem;
            background-color: blue;
        }
    </style>
</head>

<body>
    <header>

    </header>
</body>

</html>

<script>
    (function (desingnWindth, n) {
        function getRem() {
            var html = document.getElementsByTagName('html')[0];
            var deviceWidth = document.body.clientWidth || document.documentElement.clientWidth;
            var rem = deviceWidth / desingnWindth * n;
            console.log(rem);
            html.style.fontSize = rem + 'px';
        }
        getRem();
        window.addEventListener('resize', function () {
            getRem();
        })
    })(750, 100);
</script>

猜你喜欢

转载自blog.csdn.net/qq_43036190/article/details/104232062