manlili blog

rem单位引用

定位

在W3C官网上是这样描述rem的——“font size of the root element” 。下面我们就一起来详细的了解rem。
rem是相对于根元素,这样就意味着,我们只需要在根元素确定一个参考值,,在根元素中设置多大的字体,这完全可以根据您自己的需要。

使用方法

1、头部添加
2、设置根元素html的font-size作为标准,我在这里用的100px
3、引入自动判断屏幕的js
4、使用的时候记得换算具体的rem
测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<style type="text/css">
html{
font-size: 100px;
}
#test{
font-size: 5rem;
}
</style>
</head>
<body>
<div id="test">
请拉动屏幕查看字体是否放大
</div>
<script type="text/javascript">
;(function (doc, win) {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function () {
var clientWidth = docEl.clientWidth;
if (!clientWidth) return;
docEl.style.fontSize = 100 * (clientWidth / 375) + 'px';
};
if (!doc.addEventListener) return;
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
})(document, window);
</script>
</body>
</html>

常见问题

①为什么要使用CSS逻辑像素数?
对于苹果6手机屏幕来说,750px的页面宽度是一个安全的最大宽度,保证了移动端页面两边不会留白。注意这里的px是css逻辑像素,与设备的物理像素是有区别的。如iPhone 6使用的是Retina视网膜屏幕,使用2px x 2px的 device pixel 代表 1px x 1px 的 css pixel,所以设备像素数为750 x 1334px,而它的CSS逻辑像素数为375 x 667px。
如果要切移动端页面,你可以先把效果图宽度等比例缩放到375px,很好用。

②为什么要设置html的font-size?
rem就是根元素(即:html)的字体大小。html中的所有标签样式凡是涉及到尺寸的(如: height,width,padding,margin,font-size。甚至,left,top等)你都可以放心大胆的用rem作单位。
如果你把html的font-size设为100px,前面说过,rem就是html的字体大小,那么1rem = 100px。
那么一个宽60px,高40px元素样式设置如下:(需要注意设计稿上60px经过css逻辑像素数处理后是30px,即缩小2倍)
width=60px/2/100px=0.3rem
height=40px/2/100px=0.2rem

③为什么不一开始把html的font-size设为1px?
浏览器一般都有最小字体限制,比如谷歌浏览器,最小中文字体就是12px,所以实际上没有办法让1rem=1px。

请我喝杯果汁吧!