CSS单位中px、em、rem、vw、vh的区别

308 阅读3分钟

CSS 中,目前我们常用到的长度单位有 px, em, rem, vw,vh

1、px 像素(Pixel)

绝对单位。像素 px 是相对于显示器屏幕分辨率而言的,是一个虚拟长度单位,是计算机系统的数字化图像长度单位。

有些人会把px认为是相对长度,原因在于在移动端中存在设备像素比,px实际显示的大小是不确定的。这里之所以认为px为绝对单位,在于px的大小和元素

的其他属性无关。

2、em 是相对长度单位,相对于当前对象内文本的字体尺寸。

如果当前对象内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。它会继承父级元素的字体大小因此并不是一个固定的值。

em 与 px 的计算关系

em的值是px的倍数,默认情况下 font-size = 16px,那么1em = 16px

em 如何修改与px的相对计算关系

我们可以在自己元素上面修改 font-size : 32px, 从而1em = 32px。

如果自己元素上面没有设置 font-size ,我们也可以在父元素上面设置 font-size ,从而来影响自己元素(孩子元素)使用的em的值。

<style>
     /* em的用法1:自己元素设置font-size的值来当作em的参照值 */
    .em {
        font-size: 32px;  // 1em = 32px
        width: 10em;      // 10em = 10 x 32px = 320px
        height: 10em;     // 10em = 10 x 32px = 320px
        background-color: pink;
    }
     /* em的用法2:自己元素不设置,而父级元素设置font-size的值来当作em的参照值 */
    .em-father {
        font-size: 64px;  // 1em = 64px
    }
    .em-child {
        width: 10em;     // 10em = 10 x 64px = 640px
        height: 10em;    // 10em = 10 x 64px = 640px
        background-color: skyblue;
    }
</style>

<body>
    <!--em1-->
    <div class="em"> em </div>
    <!--em2-->
    <div class="em-father">
        <div class="em-child"> child </div>
    </div>
</body>

3、rem 是 CSS3 新增的一个相对单位(root em,根 em),使用 rem 为元素设定字体大小时,仍然是相对大小,但相对的只是 HTML 根元素。

这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了 IE8 及更早版本外,所有浏览器均已支持rem。

rem 与 px 的计算关系

rem的值是px的倍数

默认情况下font-size = 16px,那么1rem = 16px。

rem 如何修改与px的相对计算关系

我们可以在并且只能在html标签(因为html节点是根节点,就是rem里面的r:root)里面修改 font-size : 32px, 从而1rem = 32px。

<div class="rem">rem</div>
/* rem的用法 */
html{
    font-size:32px;  // 1rem = 32px
}
.rem{
    width: 10rem;    // 10rem = 10 x 32px = 320px
    height: 10rem;   // 10rem = 10 x 32px = 320px
    font-size: 1rem; // 1rem = 32px
    background-color: #a58778;
}

4、 vw、vh

vw ,就是根据窗口的宽度,分成100等份,100vw就表示满宽,50vw就表示一半宽。(vw 始终是针对窗口的宽),同理,vh则为窗口的高度。

这里的窗口分为两种情况:

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

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

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

5、总结:

px:绝对单位,页面按精确像素展示。

em:相对单位,基准点为父节点字体的大小,如果自身定义了font-size按自身来计算,整个页面内1em不是一个固定的值。

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

vh、vw:主要用于页面视口大小布局,在页面布局上更加方便简单。