在移动端适配和响应式开发中,选择合适的 CSS 单位如同选择趁手的工具。本文将深入剖析最常用的四个动态单位,通过对比演示帮你彻底掌握它们的特性!

一、相对单位双雄:em vs rem #

1. em - 继承缩放单位 #

<div class="parent">
  父元素字体16px
  <div class="child">子元素1.2em → 19.2px</div>
  <div class="grandchild">孙元素1.2em → 23.04px(继承父元素的19.2px)</div>
</div>

特性分析

  • 基准值来自最近的父级字体大小
  • 嵌套使用时会产生"利滚利"的叠加效果
  • 适合按钮等需要相对父级缩放的组件

2. rem - 根基准单位 #

html {
  font-size: 16px;
}

.element {
  font-size: 1.5rem; /* 始终等于24px */
}

核心优势

  • 始终基于<html>元素的字体大小
  • 避免多级嵌套导致的尺寸失控
  • 响应式开发的首选单位(配合媒体查询调整根字体)

二、视口单位双璧:vh vs vw #

1. vh - 视口高度单位 #

.header {
  height: 10vh; /* 视口高度的10% */
}
.modal {
  height: 100vh; /* 全屏效果 */
}

经典场景

  • 全屏轮播图
  • 垂直居中布局
  • 移动端导航栏

2. vw - 视口宽度单位 #

.container {
  width: 80vw; /* 视口宽度的80% */
}
.text {
  font-size: calc(1rem + 0.5vw); /* 流体排版 */
}

对比实验

<div class="parent" style="width: 500px;">
  <div class="child-percent" style="width: 50%;"></div>
  <!-- 250px -->
  <div class="child-vw" style="width: 50vw;"></div>
  <!-- 视口宽度50% -->
</div>

当视口宽度>500px 时,50vw > 50%

三、单位特性对比表 #

单位 基准对象 响应式 继承影响 典型应用场景
em 当前元素字体 ✔️ 受影响 按钮组件、文本缩进
rem 根元素字体 ✔️ 无影响 全局布局、响应式排版
vh 视口高度 ✔️ 无影响 全屏区块、垂直居中
vw 视口宽度 ✔️ 无影响 流体布局、横屏适配
% 父元素对应属性 受影响 传统流式布局

四、实战避坑指南 #

vh 移动端适配问题

/* 修复iOS地址栏问题 */
.fullscreen {
  height: 100vh;
  height: calc(var(--vh, 1vh) * 100);
}

rem 基准值设置技巧

html {
  font-size: calc(100vw / 19.2); /* 1920设计稿基准 */
}

复合单位的最佳实践

.responsive-box {
  width: min(90vw, 1200px);
  padding: 2rem;
  margin: 5vh auto;
}