CSS之em、px、rem的区别

本文介绍了前端开发中常用的长度单位px、em和rem的区别及应用场景,强调了选择适当单位对设计和响应式布局的重要性。

前端

作为一个前端开发工程师,关于这些长度单位还是得了解一下。虽然在日常的开发中px、%用的多些,也会用到vh、vw,其他的虽然用的少但也得了解,说不定就能解决你样式中的问题呢。

计量单位

在css中计量单位分相对长度单位和绝对长度单位

  • 相对长度单位:em、ex、ch、rem、vw、vh、vmin、vmax、%
  • 绝对长度单位:cm、mm、in、px、pt、pt、pc

今天就具体介绍一下其中的em、rem、px。其他的感兴趣的可以自己去了解。

em、px、rem

empx、和 rem 都是用于指定元素大小的单位,它们在 CSS 中有不同的用途和特性。

  1. px(像素):

    • px 是最基本的长度单位,表示相对于显示器屏幕分辨率的一个点。1 像素等于屏幕上的一个点。
    • px 是绝对单位,不受父元素的影响。当使用 px 时,元素的大小将始终相对于屏幕分辨率。
    div {
      width: 100px;
      height: 50px;
      font-size: 16px;
    }
    
  2. em:

    • em 是相对单位,它是相对于元素的字体大小来计算的。如果没有设置字体大小,则相对于父元素的字体大小。
    • 例如,如果父元素的字体大小为 16px,设置子元素的 font-size: 2em,则子元素的字体大小为 2 * 16px = 32px。
    body {
      font-size: 16px;
    }
    
    div {
      font-size: 2em; /* 相对于父元素字体大小,即 32px */
    }
    
  3. rem(根元素的相对单位):

    • remem 类似,但是相对的是根元素的字体大小。rem 是相对于文档的根元素(html 元素)的字体大小。
    • 这使得 rem 更易于控制整个页面的大小。
    html {
      font-size: 16px; /* 设置根元素字体大小 */
    }
    
    div {
      font-size: 2rem; /* 相对于根元素字体大小,即 32px */
    }
    

什么时候用哪个单位呢

选择使用哪个单位(pxemrem)通常取决于的设计和开发需求。以下是一些建议:

  1. 使用 px

    • 当希望元素的大小在不受父元素字体大小影响的情况下保持固定。
    • 对于一些固定大小的元素,如边框、间距等,通常使用 px 更为合适。
    div {
      width: 100px;
      padding: 10px;
      border: 1px solid #000;
    }
    
  2. 使用 em

    • 当希望元素的大小相对于其父元素的字体大小进行缩放。
    • 对于一些相对尺寸(如文本大小)和相对布局的情况,em 可以提供更灵活的解决方案。
    body {
      font-size: 16px;
    }
    
    div {
      font-size: 1.5em; /* 相对于父元素字体大小,即 24px */
      margin-bottom: 1em; /* 相对于父元素字体大小,即 16px */
    }
    
  3. 使用 rem

    • 当希望元素的大小相对于根元素的字体大小进行缩放,这样可以更容易控制整个页面的大小。
    • rem 通常用于设置全局的基础字体大小,然后其他元素使用 em 进行相对尺寸设置。
    html {
      font-size: 16px; /* 设置根元素字体大小 */
    }
    
    div {
      font-size: 2rem; /* 相对于根元素字体大小,即 32px */
      margin-bottom: 1rem; /* 相对于根元素字体大小,即 16px */
    }
    

选择合适的单位也要考虑到响应式设计的需求。相对单位(emrem)通常更适用于响应式设计,因为它们可以根据上下文动态地适应变化的环境,而绝对单位(px)在这方面相对较死板。

小结:

  • px 是绝对单位,不受父元素影响。
  • em 是相对于元素字体大小的单位,或者相对于父元素字体大小的单位。
  • rem 是相对于根元素字体大小的单位,因此更容易控制整个页面的大小。
<think>嗯,用户想了解CSSemrem单位的区别,我之前已经总结过相关知识,但需要再理清关键差异点。根据引用内容,核心区别在于参照基准不同:em依赖父元素字体大小,rem则固定参照根元素(html)的字体大小。用户可能正在学习响应式设计,因为emrem都是相对单位,在适配不同屏幕时特别重要。ta特意区分这两者,可能是遇到了嵌套元素尺寸混乱的问题。从引用的代码片段来看[^4],em在多层嵌套时确实会出现复合效应——子元素的em值会基于父元素的字体大小计算,导致逐级放大或缩小的问题。而rem始终基于根元素[^3],这种设计能避免层级干扰,更利于整体控制。用户没有提到具体应用场景,但移动端开发常用rem这个点值得强调[^1]。引用中示例代码很直观[^2],当设置html的font-size:14px时,10rem直接换算成140px,这种可预测性比em更可靠。不过em在组件内部样式隔离时仍有优势,比如希望按钮内间距随按钮字体大小等比例变化。需要提醒用户注意浏览器兼容性,虽然现在主流浏览器都支持rem,但若需兼容IE8等旧浏览器,可能要用pxem替代。另外字体单位用rem时,为方便计算,许多开发者会设置根字体为62.5%(约10px),这样1rem=10px便于换算。最终要回归使用场景给出建议:全局布局建议rem,组件内局部适配可用em。这样用户能根据实际需求选择。代码差异演示也很重要,尤其是多层嵌套时的效果对比[^4],能直观说明问题。</think> 在CSS中,`em``rem`都是相对长度单位,但**参照基准不同**,这导致它们的计算逻辑应用场景有明显差异: --- ### 一、核心区别(参照基准) 1. **`em` 单位** - **参照基准**:当前元素**父级**的字体大小(`font-size`)。 - **特性**:具有层级继承性,子元素的`1em`值会随父元素字体大小变化。 - **示例**(引用自[^4]): ```css div { font-size: 40px; /* 父元素 */ width: 10em; /* 10 × 40px = 400px */ } p { font-size: 0.5em; /* 0.5 × 40px = 20px (继承div) */ width: 10em; /* 10 × 20px = 200px (参照自身的font-size) */ } ``` 多层嵌套时尺寸会逐级叠加计算(连锁反应)❗️ 2. **`rem` 单位**(root em) - **参照基准**:**根元素**(`<html>`)的字体大小(`font-size`)[^1][^2][^3]。 - **特性**:与层级无关,所有元素的`1rem`值始终等于根元素的字体大小。 - **示例**(引用自[^2]): ```css html { font-size: 14px; /* 根元素基准 */ } #box { width: 10rem; /* 10 × 14px = 140px */ } ``` 修改根元素字体尺寸会全局影响所有`rem`单位✅ --- ### 二、关键差异总结 | **特性** | `em` | `rem` | |------------------|-----------------------------------|-----------------------------------| | 参照对象 | 父元素的字体大小 | 根元素(`<html>`)的字体大小 | | 层级影响 | 是(逐级复合) | 否(直接依赖根元素) | | 响应式调整 | 需修改各级父元素 | **仅修改根元素即可全局生效** | | 代码可维护性 | 复杂嵌套时易混乱 | 更简单、可预测 | | 典型应用场景 | 组件内部相对缩放(如按钮内间距) | **全局布局(间距、宽高、字体)** | --- ### 三、何时选择? - **推荐 `rem`**:用于整体布局(容器宽度、内外边距)、字体大小等**全局比例控制**,尤其适合响应式设计(通过媒体查询调整根元素字号即可)[^1][^3]。 - **谨慎用 `em`**:用于**组件内部细节**(如按钮内边距基于自身字体大小),需注意继承链影响[^4]。 > 总结:`rem` 因其与根元素的直接绑定,规避了层级依赖问题,已成为移动端响应式设计的首选单位[^1][^3]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值