如果你的项目里还充满
px + media query------ 那说明你在"维护样式",而不是"设计系统"。
现代 CSS 的能力,已经远远超出"写几个断点"那么简单。
今天我们从工程视角,把 单位体系 + 计算体系 一次讲透。

CSS 单位体系:本质不是长度,而是"依赖关系"
CSS 单位可以分成三类:
- 绝对单位
- 相对单位
- 视口单位
单位能力对比表
| 单位 | 类型 | 依赖对象 | 系统角色 | 推荐级别 | 典型场景 |
|---|---|---|---|---|---|
| px | 绝对 | 无 | 精准控制 | ✅ 必须存在 | 图标 / 1px 边框 |
| em | 相对 | 父级字体 | 局部缩放 | ⚠️ 慎用 | 组件内部 |
| rem | 相对 | 根字体 | 全局缩放 | ✅✅ 核心 | 系统布局 |
| vw | 视口 | 视口宽度 | 宽度适配 | ✅ | 响应布局 |
| vh | 视口 | 视口高度 | 高度控制 | ✅ | 全屏模块 |
| vmin | 视口 | 较小值 | 动态比例 | ⚡ | 特殊适配 |
| vmax | 视口 | 较大值 | 极端场景 | ⚡ | 特殊适配 |
| dvw | 动态视口 | 实际可视宽 | 移动端修正 | 🚀 | H5 |
| dvh | 动态视口 | 实际可视高 | 移动端高度修正 | 🚀 | APP/H5 |
重点认知
单位不是写数值
单位是在声明"依赖谁"
px→ 不依赖任何人(绝对控制)rem→ 依赖根节点(系统级缩放)vw→ 依赖视口(设备相关)dvh→ 依赖真实可视区域(移动端优化)
如果你做企业级系统:
推荐核心组合
css
rem + clamp + min/max + dvh
其他单位只是辅助。我们往下看!

函数才是现代 CSS 的"计算引擎"
它们不是单位,但它们决定单位如何协作。
| 函数 | 作用 | 优势 | 工程价值 |
|---|---|---|---|
| calc() | 计算 | 混合单位运算 | 结构关系表达 |
| min() | 上限控制 | 自动封顶 | 替代 max-width |
| max() | 下限控制 | 自动兜底 | 保证可读性 |
| clamp() | 区间控制 | 响应式缩放 | 替代 media query |
核心函数深度解析(实战理解)
现在我们进入"可落地"部分。
🔥 1. rem ------ 系统级缩放开关
原理
css
1rem = html 的 font-size
推荐做法
css
html {
font-size: 16px;
}
组件写法:
css
.box {
padding: 2rem;
}
为什么它是系统基石?
如果未来:
- 设计改缩放比例
- 项目整体要变大
你只需要改:
css
html { font-size: 18px }
🔥 全站自动缩放。
🔥 无需改任何组件。
这才叫"系统"。
🔥 2. clamp() ------ 响应式终极武器
这是现代 CSS 的核心。
语法
css
clamp(min, preferred, max)
实战:
css
h1 {
font-size: clamp(20px, 4vw, 48px);
}
效果:小屏不小于 20px,大屏不超过 48px,中间随视口自动变化。
工程价值
❌ 不需要维护设备列表 media query (@media (max-width: 768px))
❌ 不需要写多个断点
❌ 不需要拆分 PC / Mobile
✅ 一行表达"数学区间关系"
这不是技巧,是范式升级。
🔥 3. min() ------ 自动封顶
传统写法:
css
width: 90%;
max-width: 1200px;
现代写法:
css
width: min(1200px, 90%);
区别?
- 数学表达
- 单行逻辑
- 结构更清晰
表达的是:
宽度 = 两者中更小的那个
这才叫可维护。
🔥 4. max() ------ 自动兜底
css
.box {
padding: max(16px, 2vw);
}
保证:
- 最小 16px
- 又允许动态放大
用于保证阅读体验、可触控面积。
🔥 5. calc() ------ 混合运算核心
css
.sidebar {
width: 300px;
}
.content {
width: calc(100% - 300px);
}
能力:
- 支持加减乘除
- 支持单位混合
- 表达结构关系
它表达的是:
主体宽度 = 容器宽度 - 侧栏宽度
这叫"布局计算",而不是"写死数值"。

视口单位:vw / vh / vmin / vmax
它们的共同点只有一个:依赖设备视口。
vw
ini
1vw = 视口宽度的 1%
css
.box {
width: 50vw;
}
用于横向比例布局。
vh
ini
1vh = 视口高度的 1%
css
.hero {
height: 100vh;
}
用于全屏模块。
⚠️ 移动端慎用(dvh 更稳定)。
vmin
ini
vmin = min(vw, vh)
始终基于短边。
css
.circle {
width: 50vmin;
height: 50vmin;
}
横竖屏切换比例稳定。
vmax
ini
vmax = max(vw, vh)
始终基于长边。
css
.bg {
font-size: 20vmax;
}
适合视觉冲击型页面。

移动端必须升级:dvh、dvw
移动端地址栏会动态伸缩,100vh ≠ 实际可视高度。
解决方案:
css
height: 100dvh;
优势:
- 永远是真实可视区域
- 不会因浏览器 UI 变化跳动
- H5 / WebApp 必备
企业级布局推荐方案
如果你做后台系统 / 复杂管理台:
❌ 过时写法
- 大量
@media - 到处
max-width - 写死 16px / 20px
- 用断点区分设备
那是样式堆叠时代。
✅ 现代写法
固定系统:
css
px + min + max + clamp
弹性系统:
vbnet
rem + clamp + vw + dvh
目标只有一个:写"关系",而不是写"数值"。
总结:真正的思维升级
如果你的项目:
- 还在到处写 16px
- 还在疯狂加 media query
- 还在拆 PC / 移动端
css
@media (max-width: 768px)
你是在:手动划分设备,维护设备列表,增加未来维护成本。
而当你写:
css
font-size: clamp(16px, 2vw, 24px);
你是在:写数学区间,写系统规则,让浏览器自己计算。
你认为呢,希望这篇文章对你有所帮助、有所借鉴,欢迎在评论区随时沟通。