Sass and rounding down numbers. Can this be configured?
我有什么办法可以修改 Sass 处理小数位的方式吗?看到有几个人说sass会动态做响应式布局需要的(target/parent)*100计算,并在编译时输出结果。它甚至还有一个百分比函数,它本质上会取两个值并执行此操作。
唉,Sass 只会给我 3 位小数。到目前为止,我的理解是,在某些情况下,这可能不足以让所有浏览器正确显示布局而不会出现任何问题。
谁能帮我弄清楚这件事的真相吗?
编辑
解决了。如果其他人有兴趣,我设法在 Sass 的 number.rb 中完成了我想要的,改变了@precision 的值。这会改变所有浮点数的输出方式。
如果您使用 Compass,您可以轻松地在项目文件 (config.rb) 中指定精度,而无需破解内核:
1
|
Sass::Script::Number.precision = 8
|
有关更多信息,请参阅 Sass 文档
也可以在命令行中使用
还应该补充一点,如果你想直接在
1
|
/usr/lib/ruby/user-gems/1.8/gems/sass-3.1.10/lib/sass/script
|
1.8 和 3.1.10 当然应该替换为您的(最好是最新的)版本号。
首先将默认精度设置为项目中需要的最高精度。
然后,使用如下函数(基于 Takeru Suzuki 的此函数)在单个属性级别自定义小数位数。
代码:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
@function decimal-round ($number, $digits: 0, $mode: round) {
$n: 1; // $number must be a number @if type-of($number) != number { @warn ‘#{ $number } is not a number.’; @return $number; } // $digits must be a unitless number @if type-of($digits) != number { @warn ‘#{ $digits } is not a number.’; @return $number; } @else if not unitless($digits) { @warn ‘#{ $digits } has a unit.’; @return $number; } @if $digits > 0 { @for $i from 1 through $digits { $n: $n * 10; } } @if $mode == round { @return round($number * $n) / $n; } @else if $mode == ceil { @return ceil($number * $n) / $n; } @else if $mode == floor { @return floor($number * $n) / $n; } @else { @warn ‘#{ $mode } is undefined keyword.’; @return $number; } } |
输出:
1
2 3 4 5 6 |
decimal-round(0.333) => 0
decimal-round(0.333, 1) => 0.3 decimal-round(0.333, 2) => 0.33 decimal-round(0.666) => 1 decimal-round(0.666, 1) => 0.7 decimal-round(0.666, 2) => 0.67 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/269255.html