em/px/rem/vh/vw区别

传统的项⽬开发中,我们只会⽤到 px 、 % 、 em 这⼏个单位,它可以适⽤于⼤部分的项⽬开发,且

拥有⽐较良好的兼容性

从 CSS3 开始,浏览器对计量单位的⽀持⼜提升到了另外⼀个境界,新增了 rem 、 vh 、 vw 、

vm 等⼀些新的计量单位

利⽤这些新的单位开发出⽐较良好的响应式⻚⾯,适应多种不同分辨率的终端,包括移动设备等

单位

在 css 单位中,可以分为⻓度单位、绝对单位,如下表所指⽰

这⾥我们主要讲述px、em、rem、vh、vw

px,表⽰像素,所谓像素就是呈现在我们显⽰器上的⼀个个⼩点,每个像素点都是⼤⼩等同的,所以

像素为计量单位被分在了绝对⻓度单位中

有些⼈会把 px 认为是相对⻓度,原因在于在移动端中存在设备像素⽐, px 实际显⽰的⼤⼩是不确

定的

这⾥之所以认为 px 为绝对单位,在于 px 的⼤⼩和元素的其他属性⽆关

16.2.2. em

em是相对⻓度单位。相对于当前对象内⽂本的字体尺⼨。如当前对⾏内⽂本的字体尺⼨未被⼈为设

置,则相对于浏览器的默认字体尺⼨( 1em = 16px

为了简化 font-size 的换算,我们需要在 css 中的 body 选择器中声明 font-size =

62.5% ,这就使 em 值变为 16px*62.5% = 10px

这样 12px = 1.2em , 10px = 1em , 也就是说只需要将你的原来的 px 数值除以 10,然后换上

em 作为单位就⾏了

特点:

em 的值并不是固定的

em 会继承⽗级元素的字体⼤⼩

em 是相对⻓度单位。相对于当前对象内⽂本的字体尺⼨。如当前对⾏内⽂本的字体尺⼨未被⼈为

设置,则相对于浏览器的默认字体尺⼨

任意浏览器的默认字体⾼都是 16px

rem相对单位,相对的只是HTML根元素 font-size 的值

同理,如果想要简化 font-size 的转化,我们可以在根元素 html 中加⼊ font-size: 62.5%

1 html {font-size: 62.5%; } /* 公式**16px*62.5%=10px */

这样⻚⾯中1rem=10px、1.2rem=12px、1.4rem=14px、1.6rem=16px;使得视觉、使⽤、书写都得到

了极⼤的帮助

特点:

rem单位可谓集相对⼤⼩和绝对⼤⼩的优点于⼀⾝

和em不同的是rem总是相对于根元素,⽽不像em⼀样使⽤级联的⽅式来计算尺⼨

vh、vw

vw ,就是根据窗⼝的宽度,分成100等份,100vw就表⽰满宽,50vw就表⽰⼀半宽。(vw 始终是针

对窗⼝的宽),同理, vh 则为窗⼝的⾼度

这⾥的窗⼝分成⼏种情况:

在桌⾯端,指的是浏览器的可视区域

移动端指的就是布局视⼝

像 vw 、 vh ,⽐较容易混淆的⼀个单位是 % ,不过百分⽐宽泛的讲是相对于⽗元素:

对于普通定位元素就是我们理解的⽗元素

对于position: absolute;的元素是相对于已定位的⽗元素

对于position: fixed;的元素是相对于 ViewPort(可视窗⼝)

16.3. 总结

px:绝对单位,⻚⾯按精确像素展⽰

em:相对单位,基准点为⽗节点字体的⼤⼩,如果⾃⾝定义了 font-size 按⾃⾝来计算,整个⻚

⾯内 1em 不是⼀个固定的值

rem:相对单位,可理解为 root em , 相对根节点 html 的字体⼤⼩来计算

vh、vw:主要⽤于⻚⾯视⼝⼤⼩布局,在⻚⾯布局上更加⽅便简单