Skip to content

Sass 动态转换单位

项目场景:

在使用 Sass 扩展语言进行开发的时候。

问题描述:

使用 Sass 定义了一个变量 $box: 750px, 在这个时候想直接在后面添加是行不通的。

css
$box: 750px;
div {
  width: $box vw; /* 返回 750px vw */
}

原因分析:

在这里与 Sass 语言的编译处理机制有关。

解决方案:

首先我们得先去掉当前长度的单位,用现在的长度除于 1 的单位即可去掉单位;然后在乘以需要转换的比例即可,当然在转换单位的时候记得按比例转换。

css
/* 示例 */
$box: 750px;
div {
  width: $box / 1px * 1vw; /* 返回 750vw */
}

现在有一个需求的就是将 px 转变为 vw,并且基准值为 100px

css
$box: 750px;
div {
  width: $n / 1px / 100 * 1vw; /* 返回 7.5vw */
}

可是通过这样写发现,如果需要重复转换的时候就得重复这样写了,所以我们可以使用 Sass 中的函数进行封装,以便重复调用。

css
$box: 750px;

/* 转换width */
@function getWidth($n) {
  /* $n * 0 + 1 这样可以获取到 $n 的单位 */
  @return $n / ($n * 0 + 1) / 100 * 1vw;
}

/* 转换Height */
@function getHeight($n) {
  @return $n / ($n * 0 + 1) / 100 * 1vh;
}

div {
  width: getWitch($box); /* 返回 7.5vw */
  height: getHeight(3721px); /* 返回 37.21vh */
}

Released under the MIT License.