单位 em 和 rem 的区别
原文链接: css中单位em和rem的区别
在 css 中单位长度用的最多的是 px、em、rem,这三个的区别是:
px 是固定的像素,一旦设置了就无法因为适应页面大小而改变。
em 和 rem 相对于 px 更具有灵活性,他们是相对长度单位,意思是长度不是定死了的,更适用于响应式布局。
对于 em 和 rem 的区别一句话概括:em 相对于父元素,rem 相对于根元素。
rem 中的 r 意思是 root(根源),这也就不难理解了。
em
- 子元素字体大小的 em 是相对于父元素字体大小
- 元素的 width/height/padding/margin用 em 的话是相对于该元素的 font-size
上代码:
<div>
我是父元素
<p>
我是子元素 p
<span>
我是孙元素 span
</span>
</p>
</div>
* {
padding: 0;
margin: 0;
}
div {
font-size: 40px;
width: 10em; /* 400px */
height: 10em;
border: 1px solid black;
}
p {
font-size: 0.5em; /* 20px */
width: 10em; /* 200px */
height: 10em;
border: 1px solid red;
}
span {
font-size: 0.5em;
width: 10em;
height: 10em;
border: 1px solid blue;
display: block;
}
结果如下:
巩固测验:你能说出孙元素 span 的 font-size 和 width 吗?
答案:我猜你会说 10px、100px,哈哈,其实逻辑上是正确的,但是如果你是 chrome 浏览器我不得不告诉你应该是 12px、120px。因为 chrome设置的最小字体大小为 12px,意思就是说低于 12px 的字体大小会被默认为 12px,当然这一尬境可以由 css3 解决,这里就不多说了。
chrome 默认的 最小字体大小是 12px,也就是 1em默认为 12px,如果最外层的父元素直接把 font-size 设为 1.5em,那么该元素的字体大小为 18px(12 * 1.5)。
rem
rem 是全部的长度都相对于根元素,根元素是谁?<html>
元素。通常做法是给 html 元素设置一个字体大小,然后其他元素的长度单位就是 rem。上代码:(html 代码如上,只是把 css 代码的元素长度单位变了)
html {
font-size: 10px;
}
div {
font-size: 4rem; /* 40px */
width: 30rem; /* 300px */
height: 30rem;
border: 1px solid black;
}
p {
font-size: 2rem; /* 20px */
width: 15rem;
height: 15rem;
border: 1px solid red;
}
span {
font-size: 1.5rem;
width: 10rem;
height: 10rem;
border: 1px solid blue;
display: block;
}
所以你可以说出 span的 font-size 具体值吗?
当用 rem做响应式时,直接在媒体中改变 html的 font-size 那么用 rem 作为单位的元素的大小都会相应改变,很方便。
看到这里我想我们都更深刻的体会了 em 和 rem 的区别 (参照物不同)。
总结:
在做项目的时候用什么单位长度取决于你的需求,我一般是这样的:
像素(px):用于元素的边框或定位。
em/rem:用于做响应式页面,不过我更倾向于 rem,因为 em不同于元素的参数物不一样(都是该元素父元素),所以在计算的时候不方便,相比之下 rem 就只有一个参数物(html 元素),这样计算起来更清晰。