【问题标题】:How do you remove units of measurement from a Sass mixin equation?如何从 Sass mixin 方程中删除度量单位?
【发布时间】:2011-10-19 02:42:24
【问题描述】:

我编写了一个非常简单的 Sass mixin,用于将像素值转换为 rem 值(参见 Jonathan Snook 的 article on the benefits of using rems)。代码如下:

// Mixin Code
$base_font_size: 10; // 10px
@mixin rem($key,$px) {
  #{$key}: #{$px}px;
  #{$key}: #{$px/$base_font_size}rem;
}

// Include syntax
p {
  @include rem(font-size,14);
}

// Rendered CSS
p {
  font-size: 14px;
  font-size: 1.4rem;
}

这个 mixin 工作得很好,但我对它的 include 语法有点不满意。看,我宁愿将像素值传递给 include 语句,而不是简单的数字。这是一个小细节,但它会将语义添加到当前不存在的包含语句中。这是我尝试将像素值传递到 include 语句时得到的结果:

// Include syntax
p {
  @include rem(font-size,14px);
}

// Rendered CSS
p {
  font-size: 14pxpx;
  font-size: 1.4pxrem;
}

一旦 Sass 看到一个像素值被传递到一个方程中,它就会输出“px”。 我想去掉那个度量单位,就像我在 JavaScript 中使用 parseFloat 或 parseInt 一样。在 Sass mixin 中如何做到这一点?

【问题讨论】:

  • 至少 Sass 会让你以 rem 为单位。 Less 无法识别它,并在我的尺寸和单位之间添加了一个空格。

标签: ruby mixins sass


【解决方案1】:

从数字中删除单位是通过除法完成的,就像在代数中一样。

$base-font-size: 10px;
$rem-ratio: $base-font-size / 1rem;

@mixin rem($key,$px) {
  #{$key}: $px;
  #{$key}: $px/$rem-ratio;
}


// Include syntax
p {
  @include rem(font-size,14px);
}

// Rendered CSS
p {
  font-size: 14px;
  font-size: 1.4rem;
}

Sass 中的单位可以被视为真正的数学,所以 px/px/rem 只是 rem。尽情享受吧!

【讨论】:

  • 换一种说法,除以你要删除的单位。 10px / 1px = 10.
【解决方案2】:

这是您可以使用的功能。基于Foundation 全局辅助函数。

@function strip-unit($num) {

  @return $num / ($num * 0 + 1);
}

使用示例:

... Removed for brevity ...

@mixin rem( $key: font-size, $val ) {
    #{$key}: strip-unit( $val ) * 1px;
    #{$key}: ( strip-unit( $val ) / $base-font-size ) * 1rem;
}

【讨论】:

  • 如果$num: 1rem 那么$num * 00rem 而不仅仅是0,所以总是有一个单位
猜你喜欢
  • 2019-06-09
  • 2010-09-29
  • 1970-01-01
  • 2013-08-26
  • 1970-01-01
  • 2012-07-09
  • 2012-09-01
  • 1970-01-01
相关资源
最近更新 更多