Function 如何从SASS中的任何数字中删除该单元?

Function 如何从SASS中的任何数字中删除该单元?,function,sass,units-of-measurement,Function,Sass,Units Of Measurement,我知道,如果您事先知道SASS中的单位,您可以从数字中剥离单位,如下所示: $number: 16px; $without-unit: 16px / 1px; @warn $without-unit; // 16 但是,有没有可能在不知道第一个单元是什么的情况下从一个数字中删除该单元 @function strip-unit($number) { // magic code here... } @warn strip-unit(16px); // 16 我认为您必须添加一个定制的Rub

我知道,如果您事先知道SASS中的单位,您可以从数字中剥离单位,如下所示:

$number: 16px;
$without-unit: 16px / 1px;
@warn $without-unit; // 16
但是,有没有可能在不知道第一个单元是什么的情况下从一个数字中删除该单元

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

@warn strip-unit(16px); // 16

我认为您必须添加一个定制的Ruby函数来剥离这些单元(请参阅上的文档)。我认为它看起来像这样(警告,未经测试):

module Sass::Script::Functions
def剥离单元(数量)
断言类型num,:Number
Sass::Script::Number.new(num.value)
结束
结束
--

更新:您实际上不需要使用此功能。Sass math在单位方面非常聪明,而且我从未见过这样的用例,在这种用例中,剥离单位比简单地使用正确的数学来获得所需的更好。请参阅详细讨论的地方

这是一个聪明的函数,但如果你想使用它,你的数学可能有问题。不要依赖这个功能。改为修正你的数学

--

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

@function strip-units($number) {
  @return $number / ($number * 0 + 1);
}

这很有效<代码>条带单位(13.48cm)将返回
13.48

条带单位SASS功能的唯一用例是在写入单位转换函数时。我发现它只对将PX转换为EM/REM的任务有用,反之亦然

你需要除以相同单位的1。如果你使用unit(),你会得到一个字符串而不是一个数字,但是如果你乘零加1,你就得到了你所需要的——Miriam Suzanne

我相信SASS编译器对待值的方式与PHP解释器非常相似(尽管有一个警告),所以我认为上面的语句是不正确的。如果将字符串(以数字开头,例如
'16px'
)与数值(或以数字开头的字符串值)相除或相乘,则该字符串将转换为数字,以便编译器能够执行该操作

将字符串添加到数字时也是如此,它将数字转换为字符串

以下解决方案正确应用此策略:

@function strip-unit($value) {
  @return $value / 1;
}

@EricMeyer如果我在应用程序中使用此代码(从您的示例中复制1:1),我会收到以下警告-->
语法错误:未定义的操作:“2.1875rem乘以0”
,在
@return
语句的行号处。。。我在另一个函数中使用这个函数,因为我似乎不能使用SASS来添加两个REM单元……在更新到基金会5之后,我不得不重修相当数量的SASS。我犯了和herom一样的错误。基金会5有一个内置的函数来代替这个吗?它让我吃惊,SASS不提供这个功能。@ EricMSuzanne,这是一个真实的世界用例。我有一个断点地图
(550px,1024px)
。现在我想循环浏览该地图,并为每个地图添加一个媒体查询。容易的。但是我还想为每个断点添加一个类,比如
.show from-$var up
。我想将其解析为
。show-from-550-up
而不是
。show-from-550px-up
。从未见过这样一个用例,其中剥离单元是比简单使用正确的数学更好的选择«那么您不知道所有用例……这并不是您可以使用的核心SASS函数,这让我感到惊讶