【问题标题】:Built-in functions not working with evaluated strings, why?内置函数不适用于评估字符串,为什么?
【发布时间】:2014-08-28 10:13:09
【问题描述】:

评估的颜色字符串似乎不适用于某些内置的 LESS 函数。 我尝试过使用e()~"" 以及两者的任意组合。

我可能会为我的特殊情况找到一种解决方法,我只是想问一下这是否是预期的行为,或者我的推理是否有问题?任何见解都值得赞赏。

例如,这里的颜色是从评估的字符串创建的;请注意稍后添加的十六进制值中的“缺失”#

.broken-mixin(@hexcode: '9719e1') {

    @color: e("#@{hexcode}");

    // this works as expected
    background-color: @color;

    // this does work too
    .very-simple-mixin(@color);

    // Undefined_methodError: error evaluating function `fade`: 
    // Object #<Object> has no method 'toHSL'
    background-color: fade(@color,30%);

    // SyntaxError: error evaluating function `red`: 
    // Cannot read property '0' of undefined
    background-color: rgba(red(@color), green(@color), blue(@color), 0.5);

}

否则,内置函数通常与 mixins 中的变量一起工作,例如:

.mixin-works(@myColor: #00ff00) {
    // works just fine
    background-color: fade(@myColor,30%);
    // or this, works too
    background-color: rgba(red(@myColor), green(@myColor), blue(@myColor), 0.5);
}

我错过了什么?

【问题讨论】:

  • 将评估的字符串转换为color 对象,如background-color: fade(color("@{color}"),30%); 将起作用。我认为这是因为fade 函数需要颜色对象而不是字符串作为输入。

标签: css string less evaluation


【解决方案1】:

引用LESS website's Function Reference

淡出

设置颜色的绝对透明度。可以应用于颜色,无论它们是否已经具有不透明度值。

参数:

color:颜色对象。

金额:0-100% 的百分比。

fade 函数需要 color 对象作为其输入,因此将评估字符串作为参数传递给函数不起作用。

可以通过使用内置的color 函数将字符串转换为等效的color 对象来解决,如下所示:

background-color: fade(color("@{color}"),30%);

其他内置函数也因同样的原因无法正常工作(即,它们期望 color 对象作为输入)。

红色:

提取颜色对象的红色通道。

参数: color - 颜色对象。

【讨论】:

  • 非常感谢,我是盲人,但你让我看到了。我猜像"fade() function expects Color object as parameter, String object was passed" 这样的错误会提供信息。无论如何,我会阅读该文档!很好的答案,而且速度极快:)
  • @gabssnake:很高兴能帮助队友。是的,我也觉得有时错误消息可能会提供更多信息,但必须有充分的理由不提供这样的错误消息,因为如果它很简单,那么 LESS 核心团队可能已经这样做了。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2018-02-23
  • 2019-03-06
  • 2021-03-09
  • 1970-01-01
相关资源
最近更新 更多