【问题标题】:Sass: function as color in rgbaSass:在 rgba 中用作颜色
【发布时间】:2016-06-02 11:26:27
【问题描述】:

我创建了带有颜色及其修改(浅色、深色等)的地图以及用于从该地图中获取值的自定义函数。

$colors: (
  text: #383838,
  cyan: (
    base: #54c2e3,
    light: lighten(#54c2e3, 15%),
    dark: darken(#54c2e3, 15%)
  )
)

@function color($color-name, $color-variant:null) {
  @if $color-variant != null {
    @return map-get(map-get($colors,$color-name),$color-variant);
  } @else {
    @if type-of(map-get($colors,$color-name)) == 'map' {
      @return map-get($colors,'base');
    } @else {
      @return map-get($colors,$color-name);
    }
  }
}

但是当我把这个函数放在rgba里面时:

background: rgba(color(cyan), .5);

我得到一个错误

Error: argument `$color` of `rgba($color, $alpha)` must be a color

有没有办法在 sass rgba 函数中使用函数作为参数? 也许我是盲人,但我无法用谷歌搜索答案。

【问题讨论】:

    标签: css colors sass typeerror


    【解决方案1】:

    根据我的理解,问题出在自定义函数返回的值上。

    @else 条件的@if 部分中的以下代码行实际上不会根据您的设置返回任何内容。您应该首先根据作为参数传递的值获取颜色映射,然后从该映射中选择基本颜色值。

    @return map-get($colors,base);
    

    所以,正确的@return 语句应该像下面的代码块一样。

    @function color($color-name, $color-variant:null) {
      @if $color-variant != null {
        @return map-get(map-get($colors,$color-name),$color-variant);
      } @else {
        @if type-of(map-get($colors,$color-name)) == 'map' {
          @return map-get(map-get($colors,$color-name),base); /* your problem was here */
        } @else {
          @return map-get($colors,$color-name);
        }
      }
    }
    

    CodePen Demoa 标签的颜色和背景使用函数的输出设置)。

    【讨论】:

    • 不,这个函数按需要工作,当它按原样使用时,不作为其他函数的参数。
    • @BogdanDukhevych:但是如果我对 Sass 工作原理的理解很好,函数中的 @return - map-get($colors,'base') 将不会获取任何输出。您可以尝试我在@sassmeister.com 发布的更正代码,您会发现它有效。
    • @BogdanDukhevych:Here 是 CodePen 演示。如果您单击 CSS 框上的“查看已编译”按钮,您会看到已编译的 CSS。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    • 2014-08-11
    • 2011-10-11
    • 2011-03-15
    • 1970-01-01
    相关资源
    最近更新 更多