如何从SASS中的任何数字中剥离设备?

jor*_*ker 43 function sass units-of-measurement

我知道如果您事先知道该单位,您可以从SASS中的数字中删除单位:

$number: 16px;
$without-unit: 16px / 1px;
@warn $without-unit; // 16
Run Code Online (Sandbox Code Playgroud)

但是有可能在不知道单位是什么的情况下从一个数字中剥离单位吗?

@function strip-unit($number) {
  // magic code here...
}

@warn strip-unit(16px); // 16
Run Code Online (Sandbox Code Playgroud)

Mir*_*nne 110

-

更新:你永远不应该真的需要使用这个功能.Sass数学对于单位非常聪明,我从未见过一个用例,其中剥离单位比仅使用正确的数学来获得所需要的更好.请参阅Sass问题主题,详细讨论了这个问题.

这是一个聪明的功能,但如果您想使用它,那么您的数学可能存在问题.不要依赖这个功能.修改你的数学.

-

你需要除以相同单位的1.如果你使用unit(),你会得到一个字符串而不是一个数字,但如果你乘以零并加1,你就得到了你需要的东西:

@function strip-units($number) {
  @return $number / ($number * 0 + 1);
}
Run Code Online (Sandbox Code Playgroud)

这样可行.strip-units(13.48cm)会回来的13.48.

  • »从未见过一个用例,其中剥离单元比仅使用正确的数学更好选择«那么你不知道所有的用例...... (5认同)
  • @EricMeyer如果我在我的应用程序中使用此代码(从您的示例中复制1:1)我收到此警告 - >`语法错误:未定义操作:"2.1875rem次0"`在`@return的行号`声明......我在另一个函数中使用此函数,因为我似乎无法使用SASS添加两个**rem**单位... (4认同)
  • 令我感到惊讶的是,SASS没有提供开箱即用的功能。 (2认同)
  • @EricMSuzanne,这是一个真实世界的用例.我有一个断点图(550px,1024px)`.现在我想循环遍历该地图并为每个地图添加媒体查询.简单._But_我还想为每个断点添加一个类,例如`.show-from- $ var-up`.我想要解析`.show-from-550-up`而不是`.show-from-550px-up`. (2认同)
  • 用例:当图像 url 需要不带“%”的亮度值时。 (2认同)