前端面试题之 px 如何转为 rem【CSS】

161 阅读3分钟

css.png

px(像素)转换为 rem(根元素字体大小的相对单位)需要先确定一个基准的根元素字体大小。

通常,我们将根元素(<html>)的字体大小设置为一个特定的值,比如 16px(这是常见的默认值,但您可以根据设计需求进行修改)。

假设根元素的字体大小为 16px,那么转换公式为:rem 值 = px 值 / 16

例如,如果有一个元素的宽度为 100px,转换为 rem 就是:100 / 16 = 6.25rem

在实际开发中,可以使用预处理器(如 Sass、Less)或者 JavaScript 来实现自动转换。

有什么办法让 px 自动转为 rem, 在开发中就直接使用 px

在前端开发中,要实现输入 px 但自动转换为 rem ,可以通过以下几种方式:

优势

使用 rem 单位可以使得页面的布局更加灵活和响应式,因为 rem 单位是相对于根元素字体大小的,当用户调整浏览器字体大小时,页面中的所有元素都会相应地缩放。

  1. 使用 CSS 预处理器(如 Sass、Less)
  • Sass:
@function pxToRem($pxValue) {
  @return $pxValue / 16 + rem;
}

.element {
  width: pxToRem(100);
}

pxToRem($pxValue) 函数:这个函数将像素值转换为 rem 值。它接受一个参数 $pxValue,表示要转换的像素值。然后,它通过将 $pxValue 除以 16 来计算相应的 rem 值。这里的 16 是根据 CSS 中的默认字体大小 16px 计算得出的。最后,函数返回计算出的 rem 值,并在后面添加了单位 rem

.element 类:这是一个 CSS 类,用于设置元素的宽度。它使用了之前定义的 pxToRem 函数,将 100px 转换为 rem 值。根据函数的计算,100px 将被转换为 6.25rem。因此,.element 类的宽度将设置为 6.25rem。这样做的好处是,当需要更改根元素的字体大小时,所有使用 rem 单位的元素都将相应地调整大小,从而保持了整体的比例和一致性

  • Less:
.pxToRem(@pxValue) {
  @remValue: @pxValue / 16;
  @return @remValue + rem;
}

.element {
  width: pxToRem(100);
}

  • 在函数体内,计算 @remValue 变量,其值为 @pxValue 除以 16。这里的 16 是 CSS 中默认的字体大小 16pxpxToRem 函数将像素值转换为 rem 值。
  • 使用 @return 返回计算后的 @remValue 并添加 rem 单位。这样,调用 pxToRem 函数时将得到一个 rem 值作为返回结果。
  1. 使用构建工具(如 Webpack)的插件

    • 例如 postcss-pxtorem 插件,它可以在构建过程中自动将 px 转换为 rem 。您需要在配置中设置根元素的字体大小等相关参数。
  2. 自己编写脚本进行转换

    • 可以在开发过程中使用 JavaScript 脚本来处理样式表中的 px 值,并将其转换为 rem 。但这种方式相对复杂,并且可能会影响开发效率。
  3. vscode插件 px to rem & rpx & vw (cssrem) 也是非常成熟的工具,在书写代码的时候px单位会自动转换rem

image.png