移动端开发

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

前端常用尺寸单位

Yixuan Lang
2021-05-20
2 min

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

css-units

# 一、简介


传统的项目开发中,我们只会用到px%em这几个单位,它可以适用于大部分的项目开发,且拥有比较良好的兼容性

CSS3开始,浏览器对计量单位的支持又提升到了另外一个境界,新增了remvhvwvm等一些新的计量单位

这些新的单位可以更好的帮助我们去开发响应式的页面,从而适配不同分辨率的终端

# 二、绝对及相对长度单位


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则为窗口的高度

这里的窗口分成几种情况:

  • 在桌面端,指的是浏览器的可视区域
  • 移动端指的就是布局视口

vwvh,比较容易混淆的一个单位是%,不过百分比宽泛的讲是相对于父元素:

  • 对于普通定位元素就是我们理解的父元素
  • 对于position: absolute;的元素是相对于已定位的父元素
  • 对于position: fixed;的元素是相对于 ViewPort(可视窗口)