前端常用单位em/px/rem/vh/vm到底有什么区别?
一、单位分类
在css的单位中,可以把单位分为两类:长度单位,绝度单位,如下表:
分类 | 单位 |
---|---|
相对长度单位 | em, ex, ch, rem, vw, vh, %, vmin, vmax |
绝对长度单位 | cm, mm , in, px, pt, pc |
本文分析的是前端开发中常用单位 em、px、rem、vh、vw、% 的详细对比,从原理、特点、适用场景及示例进行说明:
二、相同点
- 用途:都用于定义元素的尺寸(如宽高、字体大小、边距等)。
- 响应式支持:除 px 外,其他单位均可用于响应式设计,能根据环境动态调整。
- 相对性:em、rem、vh、vw、% 均为相对单位,依赖某个基准值计算。
三、区别详解
1. px(像素)
- 原理:
- 绝对单位,基于屏幕物理像素,与设备分辨率直接相关。
- 特点:
- 固定大小,不受父级或视口影响。
- 高分辨率屏幕(如 Retina 屏)下可能显示过小。
- 适用场景:
- 边框(border: 1px)、阴影(box-shadow)等需精确控制的属性。
- 小图标(width: 16px)或固定尺寸元素。
- 示例:
.button { padding: 8px 16px; /* 固定内边距 */ border: 1px solid #ccc; /* 固定边框 */ }
2. em(相对父元素字体大小)
- 原理:
- 相对单位,相对于当前对象内文本的字体尺寸,如当前对行内文本的字体尺寸未被认为设置,则相对于浏览器的默认字体尺寸。
- 若父元素 font-size: 16px,则 1em = 16px。
- 特点:
- 嵌套层级影响:多层嵌套时,子元素的 em 会逐级累乘父级 font-size。
- 适合与父元素联动的场景。
- 适用场景:
- 段落内边距(padding: 1em)。
- 按钮或图标组件(需与父字体大小同步调整)。
- 示例:
.parent { font-size: 16px; } .child { padding: 1em; /* 实际为 16px */ margin-left: 2em; /* 实际为 32px */ }
3. rem(相对根元素字体大小)
- 原理:
- 相对单位,基于**根元素()**的 font-size。
- 默认根元素 font-size: 16px,因此 1rem = 16px。
- 特点:
- 全局基准:不受嵌套层级影响,统一基于根元素。
- 适合响应式布局(通过修改根元素 font-size 调整全局比例)。
- 适用场景:
- 全局布局(如容器宽高 width: 20rem)。
- 响应式文字大小(结合媒体查询动态修改根元素字号)。
- 示例:
html { font-size: 16px; /* 1rem = 16px */ } .container { width: 40rem; /* 实际为 640px */ padding: 2rem; /* 实际为 32px */ }
4. vh/vw(视窗高度/宽度百分比)
- 原理:
- 相对单位,基于**视口(Viewport)**的尺寸。
- 1vh = 视口高度的 1%,1vw = 视口宽度的 1%。
- 特点:
- 视口变化时自动适配,适合全屏布局。
- 移动端需注意浏览器导航栏可能影响实际视口高度。
- 适用场景:
- 全屏背景容器(height: 100vh)。
- 视口比例布局(如轮播图宽度 width: 50vw)。
- 示例:
.hero-section { height: 100vh; /* 占满整个视口高度 */ width: 80vw; /* 视口宽度的 80% */ }
5. %(百分比)
- 原理:
- 相对单位,基于父元素对应属性的百分比。
- 不同属性的基准不同(如 width: 50% 基于父宽度,padding-top: 50% 也基于父宽度)。
- 特点:
- 依赖父元素的明确尺寸定义,否则可能失效。
- 适合流式布局和比例控制。
- 适用场景:
- 栅格系统(width: 33.33%)。
- 图片容器宽高比例(如 padding-top: 56.25% 实现 16:9 比例)。
- 示例:
.parent { width: 600px; } .child { width: 50%; /* 实际为 300px */ padding-top: 25%; /* 实际为 150px(基于父宽度) */ }
四、对比总结
单位 基准 响应式适配性 典型场景 特点 px 绝对像素 ❌ 差 边框、固定尺寸元素 固定值,不随环境变化 em 父元素字体大小 ✅ 中 嵌套组件(如按钮) 嵌套层级影响计算结果 rem 根元素字体大小 ✅ 强 全局布局、响应式设计 全局统一基准 vh 视窗高度 ✅ 强 全屏容器 视口高度适配 vw 视窗宽度 ✅ 强 视口宽度适配(如轮播图) 视口宽度适配 % 父元素对应属性 ✅ 中 流式布局、宽高比例控制 依赖父元素明确尺寸 五、使用建议
- 优先 rem:全局布局使用 rem,通过动态修改根元素 font-size 实现响应式。
- 视口适配用 vh/vw:全屏区块或视口比例布局时使用。
- 慎用 em:仅在需要与父元素联动的场景(如按钮内边距)。
- % 需父级明确尺寸:确保父元素有明确尺寸后再使用百分比。
- px 用于细节控制:边框、阴影等需要固定值的场景。
示例综合应用:
html { font-size: 16px; /* 1rem = 16px */ } .responsive-box { width: 80vw; /* 视口宽度的 80% */ padding: 2rem; /* 32px */ margin: 1em; /* 基于父元素字体大小(假设父元素字体为默认16px,则为16px) */ border: 2px solid #000; } .fullscreen-section { height: 100vh; /* 全屏高度 */ background: #f0f0f0; }
(图片来源网络,侵删)(图片来源网络,侵删)(图片来源网络,侵删)
- 原理:
- 原理:
- 原理:
- 原理:
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。