vw&vh&em&rem
📋 核心概念对比
表格
| 单位 | 全称 | 相对基准 | 计算方式 | 适用场景 |
|---|---|---|---|---|
| vw | Viewport Width | 视口宽度 | 1vw = 视口宽度的1% | 响应式宽度、全屏布局 |
| vh | Viewport Height | 视口高度 | 1vh = 视口高度的1% | 全屏高度、视口相关布局 |
| em | em | 父元素字体大小 | 1em = 父元素font-size | 组件内部间距、字体缩放 |
| rem | Root em | 根元素(html)字体大小 | 1rem = html的font-size | 全局统一尺度、响应式字体 |
🔍 详细解析
1️⃣ vw / vh - 视口单位
css
编辑
1 | 1/* 视口宽度单位 */ |
特点:
- ✅ 完美适配各种屏幕尺寸
- ✅ 无需媒体查询即可响应式
- ⚠️ 移动端需注意浏览器地址栏影响
- ⚠️ 过小值可能导致文字难以阅读
2️⃣ em - 父元素相对单位
css
编辑
1 | 1/* 基础示例 */ |
特点:
- ✅ 适合组件内部相对缩放
- ✅ 继承性强,便于整体调整
- ⚠️ 嵌套时会累积计算,可能失控
- ⚠️ 需要仔细计算层级关系
3️⃣ rem - 根元素相对单位
css
编辑
1 | 1/* 设置根元素字体 */ |
特点:
- ✅ 不会累积,始终相对于根元素
- ✅ 便于全局统一控制
- ✅ 配合媒体查询实现响应式
- ✅ 无障碍友好,支持用户浏览器设置
📊 决策指南表
表格
| 场景 | 推荐单位 | 理由 |
|---|---|---|
| 全屏布局 | vw/vh | 直接基于视口尺寸 |
| 响应式字体 | rem + 媒体查询 | 全局可控,无障碍友好 |
| 组件内部间距 | em | 随组件字体自动缩放 |
| 按钮/卡片尺寸 | rem | 统一尺度,易于维护 |
| 容器最大宽度 | rem 或 % | 配合max-width使用 |
| 精确像素需求 | px | 边框、阴影等细节 |
💡 2026年最佳实践
🟢 推荐组合方案
css
编辑
1 | 1/* 现代响应式方案 */ |
📱 移动端适配技巧
css
编辑
1 | 1/* 方案1:rem + 媒体查询 */ |
⚠️ 常见陷阱
表格
| 问题 | 说明 | 解决方案 |
|---|---|---|
| em嵌套累积 | 多层嵌套导致字体过大 | 优先使用rem |
| vw字体过小 | 小屏幕上文字难以阅读 | 使用clamp()设置最小值 |
| 移动端vh问题 | 地址栏影响实际高度 | 使用dvh/svh新单位 |
| rem需要基准 | 依赖html字体设置 | 统一设置根元素font-size |
📝 总结对比
text
编辑
1 | 1┌─────────────────────────────────────────────────────────┐ |
2026年推荐:
- 🏆 rem 作为主要单位(全局可控、无障碍友好)
- 🏆 vw/vh 用于视口相关布局
- 🏆 em 用于组件内部相对缩放
- 🏆 配合
clamp()函数实现更智能的响应式
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Chenzyishere's blog!
