css - 语法错误 : error evaluating function `unit` : the first argument to unit must be a number

标签 css loops random less mixins

我使用 less mixin 生成给定范围内的随机数。 这是代码:

.makeRandom(@min: 0, @max: @min+1) {
  // Math.floor(Math.random() * (max - min + 1)) + min
  @getNum: `(Math.floor(Math.random() * (@{max} - @{min} + 1)) + @{min})`;
}

并在调用 div 时调用另一个 mixin 集动画:

.move (@left : 45% , @duration: 5s ,@delay : 2s) {
   animation: moveUp @duration linear @delay infinite;
   /* Safari and Chrome: */
   -webkit-animation: moveUp @duration linear @delay infinite ;
   .makeRandom(100,  400);
   margin-left:  unit(@getNum ,'px');
 }

但是我收到了这个错误

SyntaxError: error evaluating function unit: the first argument to unit must be a number

当我尝试更改单位时。如何更改@getnum 的单位?

最佳答案

我在 v1.5 中注意到了这个问题。

从 v1.5 开始,您不能将非数字值(不传递 isnumber())传递给像 unit() 这样只接受数字作为参数的函数,即使尽管它在早期版本中有效。

并且 - LESS <= 1.6.0 无法将 javascript 插值中的数值识别为数字,isnumber(`2`); 会返回 false

所以,这两个放在一起就是为什么 javascript 返回的数字在 v1.5 中不起作用,但在 v1.5 之前起作用并在 LESS v1.6 中再次起作用的原因。


但如果您需要在 1.5 中使用它,您可以通过使用接受字符串或 javascript 插值返回的“非数字”的函数来“转换类型”:

@str: '230'; //or `230`
@getNum: (percentage(@str)/100);

这会在末尾添加百分号 % ...但是如果您只是想将它用于数字并不重要...因为现在您可以将它传递给任何函数只接受数字......在你的情况下使用 unit() 你可以将单位更改为任何你喜欢的。

margin-left:  unit(@getNum , px);

但是,在您的情况下,一个更简单的解决方案是跳过 unit() 函数并将单元连接到 @getNum:

margin-left:  ~'@{getNum}px';

两种情况下的 CSS 输出都如下所示:

margin-left: 230px;

关于css - 语法错误 : error evaluating function `unit` : the first argument to unit must be a number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21549362/

相关文章:

image - 如何使用批处理文件将随机图像从文件夹复制到其他文件夹?

python - 随机数字列表并将它们相加

仅使用 rand(start,end) 6 次从 50 个元胞数组中选择 6 个不同的元胞

java - For循环不打印用户输入

sql - 无法回滚子事务。未找到该名称的事务或保存点

html - 你能设置有序列表编号的样式吗?

html - :active is not working

html - html 电子邮件的 100% 表格宽度

javascript - jquery 扩展栏小部件

javascript - JavaScript 中奇怪的 for 循环