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>