# 对前端尺寸px、vw、vh、rem、em的理解

# 一、简介
传统的项目开发中,我们只会用到px
、%
、em
这几个单位,它可以适用于大部分的项目开发,且拥有比较良好的兼容性
从CSS3
开始,浏览器对计量单位的支持又提升到了另外一个境界,新增了rem
、vh
、vw
、vm
等一些新的计量单位
这些新的单位可以更好的帮助我们去开发响应式的页面,从而适配不同分辨率的终端
# 二、绝对及相对长度单位
CSS的单位主要可以分为绝对长度单位以及相对长度单位
绝对长度单位
是一个固定的值,它反应一个真实的物理尺寸。绝对长度单位视输出介质而定,不依赖于环境(显示器、分辨率、操作系统等)。相对长度单位
中的 “相对” 二字,表明了其长度会随着它的参考值的变化而变化,不是固定的。所以,在使用相对长度单位之前一定要知道其 参考元素 是什么。单位类型 CSS单位 相对长度单位 em、ex、ch、rem、vw、vh、vmin、vmax、% 绝对长度单位 cm、mm、in、px、pt、pc
在开发中经常使用的长度单位就是px % em rem vh vw这几种,所以我们重点来了解这几中CSS单位
# 三、CSS单位
# 1. px
px,表示像素,所谓像素就是呈现在我们显示器上的一个个小点,每个像素点都是大小等同的,所以像素为计量单位被分在了绝对长度单位中
有些人会把px
认为是相对长度,原因在于在移动端中存在设备像素比,px
实际显示的大小是不确定的
这里之所以认为px
为绝对单位,在于px
的大小和元素的其他属性无关
# 2. em
em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸(1em = 16px
)
- 子元素==字体大小==的em是相对于父元素字体大小
- 元素的width/height/padding/margin用em的话是相对于该元素的font-size
<div>
我是父元素div
<p>
我是子元素p
</p>
</div>
div {
font-size: 40px;
width: 10em; /* 400px */
}
p {
font-size: 0.5em; /* 20px */
width: 10em; /* 200px */
}
# 3. rem
rem是相对单位,rem是全部的长度都相对于根元素,根元素是谁?html元素。通常做法是给html元素设置一个字体大小,然后其他元素的长度单位就为rem。
<div>
我是父元素div
<p>
我是子元素p
</p>
</div>
html {
font-size: 10px;
}
div {
font-size: 4rem; /* 40px */
width: 30rem; /* 300px */
}
p {
font-size: 2rem; /* 20px */
width: 15rem; /* 150px */
}
# 4. vh和vw
vw ,就是根据窗口的宽度,分成100等份,100vw就表示满宽,50vw就表示一半宽。(vw 始终是针对窗口的宽),同理,vh
则为窗口的高度
这里的窗口分成几种情况:
- 在桌面端,指的是浏览器的可视区域
- 移动端指的就是布局视口
像vw
、vh
,比较容易混淆的一个单位是%
,不过百分比宽泛的讲是相对于父元素:
- 对于普通定位元素就是我们理解的父元素
- 对于position: absolute;的元素是相对于已定位的父元素
- 对于position: fixed;的元素是相对于 ViewPort(可视窗口)