【CSS篇】px、em和rem的区别及使用场景

165 阅读2分钟

在网页设计中,选择合适的单位对于确保页面的灵活性和响应性至关重要。以下是关于 pxemrem 三种单位的区别及其适用场景的详细介绍。

1. 区别

  • px(像素)

    • 是一个绝对单位,表示屏幕上的物理像素点。
    • 固定尺寸,不会随页面缩放或分辨率变化而改变。
    • 适用于需要精确控制元素大小的情况。
  • em

    • 是相对长度单位,相对于当前元素的字体大小来计算。
    • 如果当前元素未设置字体大小,则继承自父元素的字体大小。
    • 可能导致嵌套层级过深时出现“累积效应”,即子元素的大小会基于其所有祖先元素的字体大小进行累加计算。
  • rem

    • 同样是相对长度单位,但它是相对于根元素(即 <html> 标签)的字体大小来计算。
    • 避免了 em 的嵌套问题,使得整个文档中的所有 rem 值都基于同一个基准值。
    • 更适合用于全局调整,例如实现响应式布局。

2. 使用场景

  • px

    • 适用场景: 当你需要固定尺寸的设计,如图标、边框等不需要随浏览器窗口大小变化的元素。
    • 示例:
      .icon {
          width: 24px;
          height: 24px;
      }
      
  • em

    • 适用场景: 在局部范围内,特别是当你希望某些元素根据其直接父元素的字体大小进行缩放时非常有用。
    • 注意事项: 需要特别注意嵌套层次,避免因为父级字体大小的不同而导致不可预期的结果。
    • 示例:
      .parent {
          font-size: 20px;
      }
      
      .child {
          font-size: 1.5em; /* 实际为30px */
      }
      
  • rem

    • 适用场景: 最适合于响应式设计和移动端开发,因为它允许你通过更改根元素的字体大小来轻松地调整整个页面的缩放比例。
    • 优点: 简化了响应式布局的实现过程,并且易于维护。
    • 示例:
      html {
          font-size: 16px;
      }
      
      .title {
          font-size: 2rem; /* 实际为32px */
      }
      
      • 动态调整根元素字体大小以适应不同设备:
        function adjustFontSize() {
            const baseSize = 16; // 默认基础字体大小
            const scale = document.documentElement.clientWidth / 750; // 假设设计稿宽度为750px
            document.documentElement.style.fontSize = `${baseSize * Math.min(scale, 2)}px`;
        }
        
        window.addEventListener('resize', adjustFontSize);
        adjustFontSize(); // 页面加载时调用一次
        

总结

  • 使用 px 当你需要固定的、不随页面缩放的尺寸。
  • 使用 em 当你需要根据父元素的字体大小来调整元素大小,尤其是在组件内部。
  • 使用 rem 来简化响应式布局的设计,特别是在移动优先的设计中,通过调整根元素的字体大小来适应不同的屏幕尺寸。这不仅提高了代码的可维护性,也使得响应式设计更加直观和高效。