CSS 面试题 目录

请解释 em, rem, px, vh, vw 这些单位的区别和应用场景。在响应式设计中,你会如何选择使用这些单位?

推荐答案

区别:

  • px (像素): 绝对单位,固定大小,与设备像素直接对应。在不同设备上显示效果一致。
  • em: 相对单位,相对于父元素的字体大小。若父元素字体大小为16px,则1em等于16px;若父元素字体大小改变,则em的值也会跟着改变。
  • rem: 相对单位,相对于**根元素 (html)**的字体大小。即使元素嵌套很深,其大小也始终与根元素的字体大小有关。
  • vh (viewport height): 相对单位,相对于视口高度的百分比。1vh等于视口高度的1/100。
  • vw (viewport width): 相对单位,相对于视口宽度的百分比。1vw等于视口宽度的1/100。

应用场景:

  • px:
    • 用于精确控制边框、间距等,不常用于字体大小。
    • 适用于在像素级要求精确的场景。
  • em:
    • 适用于局部组件的尺寸,保持组件内部元素尺寸的相对一致性。
    • 不推荐用于全局布局,嵌套深层级时可能会导致尺寸计算复杂。
  • rem:
    • 最常用的响应式字体大小单位,可以统一管理整个网站的字体大小。
    • 适用于整个网站的布局,可以通过修改根元素的字体大小来整体缩放。
  • vh/vw:
    • 适用于创建占满视口的元素,如全屏轮播图,全屏背景等。
    • 适用于根据视口大小动态调整元素尺寸。
    • 用于实现类似百分比布局的效果,但更直接与视口尺寸关联。

响应式设计中的选择:

  • 字体大小: 优先使用 rem,通过修改根元素的字体大小来实现整体缩放,方便响应式适配。
  • 布局尺寸:
    • 可以使用 rem,保持布局的相对比例。
    • 部分场景可以使用 vw 或者 vh 来实现特殊比例布局。
    • 对于固定大小的元素或无需缩放的元素,可以使用 px
  • 间距: 推荐使用 rem,可以和字体大小联动,保持比例一致。
  • 视口相关: 使用 vhvw 创建全屏或视口相关的效果。
  • 组件内部: 可以使用 em,保持组件内部元素相对比例。

本题详细解读

单位详解

px (像素)

  • 定义: px (pixel) 是屏幕上构成图像的最小单位,是一个绝对长度单位。
  • 特点:
    • 大小固定,在不同设备上显示大小基本一致(但由于设备像素密度不同,可能会有感知上的差异)。
    • 直接对应物理像素,无法根据用户偏好或设备尺寸进行缩放。
  • 应用场景:
    • 对显示效果有精确要求的场景,如 1px 边框。
    • 非响应式布局或小型元素(图标等)。
    • 不推荐用于字体大小,不利于用户调整字体偏好。

em (相对单位)

  • 定义: em 的大小相对于当前元素font-size 大小计算。
  • 特点:
    • 大小会继承父元素的 font-size
    • 如果当前元素没有设置 font-size,则会继续向上查找父元素,直到找到设置了 font-size 的祖先元素。
    • 计算嵌套的元素大小会比较复杂。
  • 应用场景:
    • 适用于组件内部的元素大小,保证组件内部的相对比例。
    • 不推荐用于全局布局或字体大小,容易出现大小混乱的问题。

rem (相对单位)

  • 定义: rem 的大小相对于根元素 (html)font-size 大小计算。
  • 特点:
    • 大小不受元素层级嵌套影响,所有 rem 都以根元素的 font-size 为基准。
    • 方便全局控制页面元素的缩放比例,修改根元素的 font-size 即可整体调整。
  • 应用场景:
    • 响应式布局中最常用的单位,尤其是字体大小,方便适配不同屏幕尺寸。
    • 全局布局、间距、元素大小的控制。

vh (视口高度)

  • 定义: vh (viewport height) 是视口高度的百分比单位,1vh 等于视口高度的 1/100。
  • 特点:
    • 大小与浏览器视口的高度相关,浏览器窗口高度发生变化时,vh 的值也会随之变化。
    • 不包括地址栏等浏览器工具栏的高度。
  • 应用场景:
    • 创建全屏或视口高度相关的内容,如全屏背景、轮播图等。
    • 实现高度自适应布局。

vw (视口宽度)

  • 定义: vw (viewport width) 是视口宽度的百分比单位,1vw 等于视口宽度的 1/100。
  • 特点:
    • 大小与浏览器视口的宽度相关,浏览器窗口宽度发生变化时,vw 的值也会随之变化。
    • 不包括滚动条的宽度。
  • 应用场景:
    • 创建全屏或视口宽度相关的内容。
    • 实现宽度自适应布局。

响应式设计中的选择原则

  1. 可维护性和可扩展性: 使用 rem 可以方便地通过修改根元素的 font-size 来整体调整页面大小,便于维护和扩展。
  2. 用户体验:
    • 优先考虑使用相对单位,允许用户调整字体大小。
    • 避免使用过多的绝对单位,不利于响应式适配。
  3. 一致性和可预测性: rem 可以让所有元素大小都基于根元素 font-size 计算,保持一致性,降低复杂性。
  4. 灵活性:
    • 使用 vhvw 可以灵活创建基于视口大小的布局。
    • em 可以用在组件内部,保持组件内的元素相对比例。
  5. 场景适用性:
    • 对于固定大小的元素、像素级精确控制的场景,可以使用 px
    • 对于响应式布局和组件复用场景,优先考虑使用 rem 或者 em

在实际开发中,需要根据具体的场景需求,合理选择合适的单位,混合使用,以达到最佳的响应式效果。

纠错
反馈