视频加载失败

CSS3中开发中的常用单位

1513 字
8 分钟
CSS3中开发中的常用单位

CSS3 常用长度单位#

CSS 中的长度单位主要分为两类:

  • 绝对长度单位:如 px,不直接依赖父元素的尺寸。
  • 相对长度单位:如 %、em、rem、vw、vh 等,根据不同的参照对象计算实际大小。

px(像素)#

px 是 CSS 中最常用的长度单位,表示 CSS 像素。

基本使用#

.box {
width: 300px;
height: 200px;
font-size: 16px;
padding: 20px;
border: 1px solid black;
}

特点:

  • 数值明确,容易控制元素尺寸。
  • 不依赖父元素的宽度或字体大小。
  • 适合边框、图标、固定尺寸元素、细节间距等。

px 不等于物理像素#

CSS 中的 1px 不一定对应屏幕上的一个物理像素。例如,在设备像素比(DPR)为 2 的情况下,正常缩放时:1 CSS px 通常对应 2 × 2 个物理像素。因此,px 不是永远固定的物理尺寸。

开发场景#

.card {
width: 320px;
padding: 16px;
border-radius: 8px;
border: 1px solid #ddd;
}

px 适合需要精确控制尺寸的场景,但大量使用固定宽高可能导致小屏幕溢出,因此响应式开发通常需要搭配其他单位。

百分号(%)#

% 是相对单位,通常根据相关属性对应的包含块尺寸计算,而不是所有属性都相对于父元素的同一个尺寸。

基本使用#

<div class="parent">
<div class="child"></div>
</div>
.parent {
width: 500px;
height: 300px;
}
.child {
width: 50%;
height: 50%;
}

计算结果:

  • 子元素宽度:500 × 50% = 250px
  • 子元素高度:300 × 50% = 150px

不同属性的百分比参照对象#

属性百分比主要参照
width包含块宽度
height包含块高度(需要满足相应的高度计算条件)
padding包含块宽度
margin包含块宽度
font-size父元素字体大小
transform: translateX()元素自身的参考盒宽度
transform: translateY()元素自身的参考盒高度

注意,padding-top: 10% 通常也是根据包含块的宽度计算,而不是高度。

开发场景#

.container {
width: 80%;
max-width: 1200px;
margin: 0 auto;
}

适合:

  • 流式布局。
  • 容器宽度自适应。
  • 子元素占据父容器一定比例。

em#

em 是相对字体大小的长度单位。

基本规则#

  • 用在 font-size 上:相对于父元素计算后的字体大小。
  • 用在其他长度属性上:相对于当前元素计算后的字体大小。

基本使用#

.parent {
font-size: 20px;
}
.child {
font-size: 1.5em;
padding: 2em;
}

计算过程:

  • .child 字体大小:20 × 1.5 = 30px
  • .child 内边距:30 × 2 = 60px

虽然都使用 em,但因为属性不同,计算参照对象也不同。

em的嵌套问题#

<div class="box">
第一层
<div class="box">
第二层
<div class="box">第三层</div>
</div>
</div>
body {
font-size: 16px;
}
.box {
font-size: 1.5em;
}

嵌套计算结果:

层级字体大小
第一层24px
第二层36px
第三层54px

这就是 em 容易出现字体逐层放大的原因。

开发场景#

em 适合希望元素的间距、尺寸跟随自身字体大小变化的组件。

.button {
font-size: 16px;
padding: 0.5em 1em;
border-radius: 0.5em;
}

当按钮字体大小变化时,内边距和圆角也会按比例变化。

rem#

rem 是相对于根元素 <html> 的字体大小计算的单位。

基本使用#

html {
font-size: 16px;
}
.box {
width: 20rem;
height: 10rem;
font-size: 1.5rem;
}

计算结果:

  • 20rem = 320px
  • 10rem = 160px
  • 1.5rem = 24px

rem 与 em 的区别#

html {
font-size: 16px;
}
.parent {
font-size: 20px;
}
.child {
font-size: 2em;
padding: 2rem;
}
  • 2em = 40px,相对于父元素字体大小计算。
  • 2rem = 32px,相对于根元素字体大小计算。

rem 不会像 em 那样因为普通父元素的字体设置而不断累积放大。

rem 的响应式应用#

通过修改根元素的字体大小,可以统一调整使用 rem 的尺寸。

html {
font-size: 16px;
}
.card {
width: 20rem;
padding: 1.5rem;
}
@media (max-width: 600px) {
html {
font-size: 14px;
}
}

注意:这种做法仅改变使用 rem 的尺寸,不代表页面自动完成响应式布局。另外,修改根字号也会影响使用 rem 的文字大小,需要考虑可读性。

开发场景#

适合:

  • 全局字体大小。
  • 组件内外边距。
  • 统一间距系统。
  • 需要跟随根字体大小调整的元素尺寸。

vw/vh/vmax/vmin#

这四种单位都相对于**视口(Viewport)**计算,而不是父元素。

vw(视口宽度)#

1vw = 视口宽度的 1%

假设视口宽度为 1000px:

  • 1vw = 10px
  • 50vw = 500px
  • 100vw = 1000px
.box {
width: 50vw;
}

无论父元素宽度多少,元素的指定宽度始终根据视口宽度计算。

vh(视口高度)#

1vh = 视口高度的 1%

假设视口高度为 800px:

  • 1vh = 8px
  • 50vh = 400px
  • 100vh = 800px
.hero {
height: 100vh;
}

适合首页首屏、全屏背景等场景。

注意:移动端浏览器工具栏会影响可见区域,现代开发中需要真正贴合动态可见高度时,可以考虑 100dvh。

vmax(视口较大边)#

1vmax = max(视口宽度, 视口高度) × 1%

vmin(视口较小边)#

1vmin = min(视口宽度, 视口高度) × 1%

例如,视口为 1200 × 800px 时:

单位参照结果
1vw宽度 1200px12px
1vh高度 800px8px
1vmax较大边 1200px12px
1vmin较小边 800px8px

开发场景#

/* 全屏首屏 */
.hero {
min-height: 100dvh;
}
/* 根据视口宽度调整标题大小 */
.title {
font-size: clamp(24px, 4vw, 48px);
}
/* 始终保持正方形 */
.square {
width: 30vmin;
height: 30vmin;
}
/* 根据视口较大边创建背景圆形 */
.circle {
width: 50vmax;
height: 50vmax;
border-radius: 50%;
}

其中 vmin 很适合需要同时考虑横屏和竖屏的场景。

常用单位总结#

单位参照对象常见用途
pxCSS 像素边框、图标、固定尺寸
%取决于属性容器宽度、流式布局
em当前或父元素字体大小组件内部比例、按钮
rem根元素字体大小字体、全局间距系统
vw视口宽度视口相关尺寸、流体字号
vh视口高度全屏布局、首屏区域
vmax视口较大边大型背景、装饰元素
vmin视口较小边自适应正方形、圆形

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

CSS3中开发中的常用单位
https://f.youzi177.cn/posts/2026101001css3-zhong-kai-fa-zhong-de-chang-yong-dan-wei/
作者
小封鸭
发布于
2026-10-10
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
小封鸭
小楼一夜听春雨,深巷明朝卖杏花
公告
欢迎来到我的博客。这里主要记录前端全栈和日常内容
分类
标签
最新动态
站点统计
文章
60
分类
3
标签
12
总字数
107,734
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
EdgeOne Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
文章目录