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:主要⽤于⻚⾯视⼝⼤⼩布局,在⻚⾯布局上更加⽅便简单



