号码

Sass中的数字包含两个部分:数字本身及其单位。例如,16px数字为16,单位为px。数字不能有单位,也可以有复杂的单位。有关更多详细信息,请参见下面的单位

SCSS  语法

@debug 100; // 100
@debug 0.8; // 0.8
@debug 16px; // 16px
@debug 5px * 2px; // 10px*px (read "square pixels")

Sass语法

@debug 100  // 100
@debug 0.8  // 0.8
@debug 16px  // 16px
@debug 5px * 2px  // 10px*px (read "square pixels")

Sass编号支持与CSS编号相同的格式,包括科学计数法,该数字用e介于10的整数和10的幂之间的整数表示。由于浏览器对科学计数法的支持一直以来都是零星的,因此Sass始终将其编译为完全扩展的数字。

SCSS  语法

@debug 5.2e3; // 5200
@debug 6e-2; // 0.06

Sass语法

@debug 5.2e3  // 5200
@debug 6e-2  // 0.06

Head️抬头!

Sass不能区分整数和小数,因此例如5 / 2返回2.5而不是2。这与JavaScript相同,但与许多其他编程语言不同。

单位永久链接单位

Sass根据实际单位计算的工作方式为操纵单位提供强大的支持。当两个数字相乘时,其单位也将相乘。当一个数字除以另一个时,结果从第一个数字获取其分子单位,从第二个数字获取其分母单位。一个数字在分子和/或分母中可以具有任意数量的单位。

SCSS  语法

@debug 4px * 6px; // 24px*px (read "square pixels")
@debug 5px / 2s; // 2.5px/s (read "pixels per second")
@debug 5px * 30deg / 2s / 24em; // 3.125px*deg/s*em
                                // (read "pixel-degrees per second-em")

$degrees-per-second: 20deg/1s;
@debug $degrees-per-second; // 20deg/s
@debug 1 / $degrees-per-second; // 0.05s/deg

Sass语法

@debug 4px * 6px  // 24px*px (read "square pixels")
@debug 5px / 2s  // 2.5px/s (read "pixels per second")
@debug 5px * 30deg / 2s / 24em  // 3.125px*deg/s*em
//                                 (read "pixel-degrees per second-em")

$degrees-per-second: 20deg/1s
@debug $degrees-per-second  // 20deg/s
@debug 1 / $degrees-per-second  // 0.05s/deg

Head️抬头!

由于CSS不支持正方形像素等复杂单位,因此将具有复杂单位的数字用作属性值会产生错误。但是,这是变相的功能;如果您没有找到正确的单位,那通常意味着您的计算有问题!请记住,您始终可以使用@debug规则检出任何变量或表达式的单位。

Sass会自动在兼容的单位之间转换,尽管它会选择哪个单位作为结果取决于您使用的Sass实现。如果尝试组合不兼容的单位(如)1in + 1em,Sass会抛出错误。

SCSS  语法

// CSS defines one inch as 96 pixels.
@debug 1in + 6px; // 102px or 1.0625in

@debug 1in + 1s;
//     ^^^^^^^^
// Error: Incompatible units s and in.

Sass语法

// CSS defines one inch as 96 pixels.
@debug 1in + 6px  // 102px or 1.0625in

@debug 1in + 1s
//     ^^^^^^^^
// Error: Incompatible units s and in.

与实际单位计算一样,如果分子包含与分母中的单位兼容的单位(如96px / 1in),它们将被抵消。这样可以轻松定义可用于单位之间转换的比率。在下面的示例中,我们将所需速度设置为每50像素1秒,然后将其乘以过渡覆盖的像素数,以获取所需的时间。

SCSS  语法

$transition-speed: 1s/50px;

@mixin move($left-start, $left-stop) {
  position: absolute;
  left: $left-start;
  transition: left ($left-stop - $left-start) * $transition-speed;

  &:hover {
    left: $left-stop;
  }
}

.slider {
  @include move(10px, 120px);
}

Sass语法

$transition-speed: 1s/50px

@mixin move($left-start, $left-stop)
  position: absolute
  left: $left-start
  transition: left ($left-stop - $left-start) * $transition-speed

  &:hover
    left: $left-stop



.slider
  @include move(10px, 120px)

CSS  输出

.slider {
  position: absolute;
  left: 10px;
  transition: left 2.2s;
}
.slider:hover {
  left: 120px;
}







Head️抬头!

如果您的算术给您错误的单位,您可能需要检查数学。您可能要放弃一定数量的单位!保持单元清洁可让Sass在出现问题时向您提供有用的错误。

您尤其应该避免使用像这样的插值法#{$number}px。这实际上并不会创建数字!它创建了一个加引号的字符串看起来像一个数字,但不会有任何工作数量的操作功能。尝试使数学单位整洁,以便$number已经具有该单位px,或者编写  $number * 1px

Head️抬头!

Sass中的百分比与其他所有单元一样工作。它们不能与小数互换,因为在CSS中,小数和百分比表示不同的含义。例如,50%是以数字%为单位的数字,而Sass认为它与数字不同  0.5

您可以使用单位算术在小数和百分比之间转换。$percentage / 100%将返回相应的小数,并$decimal * 100%返回相应的百分比。您也可以将math.percentage()函数用作更明确的编写方式  $decimal * 100%

精度永久链接精度

兼容性(默认为10位数字):
Dart·Sass(Dart Sass)
LibSass
rubySass
从  3.5.0开始

LibSass和旧版本的Ruby Sass的默认数字精度为5位数字,但可以配置为使用其他数字。建议用户将其配置为10位数字,以提高准确性和转发兼容性。

简单数字在小数点后最多支持10位精度。这意味着一些不同的事情:

  • 生成的CSS仅包含小数点后的数字的前十个数字 

  • ==和这样的运算符>=将认为两个数字相等,如果它们与小数点后的第十位相同。

  • 如果数字小于0.0000000001整数,则出于list.nth()需要整数参数的函数的目的,应将其视为整数。

SCSS  语法

@debug 0.012345678912345; // 0.0123456789
@debug 0.01234567891 == 0.01234567899; // true
@debug 1.00000000009; // 1
@debug 0.99999999991; // 1

Sass语法

@debug 0.012345678912345  // 0.0123456789
@debug 0.01234567891 == 0.01234567899  // true
@debug 1.00000000009  // 1
@debug 0.99999999991  // 1

???? 有趣的事实:

数字四舍五入至10位的精度懒洋洋地,当他们在一个地方,精确度是相关的习惯。这意味着数学函数将在内部使用整数值,以避免累积额外的舍入误差。