号码
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%
。
精度永久链接精度
- 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位的精度懒洋洋地,当他们在一个地方,精确度是相关的习惯。这意味着数学函数将在内部使用整数值,以避免累积额外的舍入误差。