首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在SCSS @mixin中附加奇怪的字符

在SCSS @mixin中附加奇怪的字符
EN

Stack Overflow用户
提问于 2018-05-15 22:29:59
回答 1查看 103关注 0票数 3

在下面的场景中,我需要支持尽可能多的浏览器。

我正在构建一个SCSS @mixin,它用供应商前缀前缀background-image,但也侦听看是否声明了linear-gradient,如果声明了,那么前缀也是。

我的代码如下所示:

代码语言:javascript
复制
@function str-coerce($string) {
  @return inspect($string);
}

@function str-replace($string, $find, $replace: "") {
  $index: str-index($string, $find);

  @if $index {
    @return str-slice($string, 1, $index - 1) + $replace + str-replace(str-slice($string, $index + str-length($find)), $find, $replace);
  }

  @return $string;
}

@mixin background-image($values...) {
  $vendors: (-webkit-, -moz-, -o-);

  @each $vendor in $vendors {
    $string: str-coerce($values);

    @if (str-index($string, "linear-gradient")) {
    $string: str-replace($string, "linear-gradient", #{$vendor + "linear-gradient"});

    @if (str-index($vendor, "-o-")) {
      $vendor: str-replace($vendor, "-o-");
    }

    #{$vendor + "background-image"}: $string;
    } @else {

      @if not (str-index($vendor, "-o-")) {
        #{$vendor + "background-image"}: $values;
      }
    }
  }

  background-image: $values;
}

用法和输出如下所示:

代码语言:javascript
复制
// usage
.foo {
  @include background-image(url("../example.svg"));
}
.bar {
  @include background-image(linear-gradient(45deg, red, blue));
}

// output
.foo {
  -webkit-background-image: url("../example.svg");
  -moz-background-image: url("../example.svg");
  background-image: url("../example.svg");
}
.bar {
  -webkit-background-image: (-webkit-linear-gradient(45deg, red, blue),);
  -moz-background-image: (-moz-linear-gradient(45deg, red, blue),);
  background-image: (-o-linear-gradient(45deg, red, blue),);
  background-image: linear-gradient(45deg, red, blue);
}

我的问题是,我的类型强制导致我的linear-gradient供应商前缀被封装在括号中并加上逗号,这到底是怎么回事?例如(-moz-linear-gradient(45deg, red, blue),)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-16 00:15:16

虽然我不完全确定为什么您的值被包装在()中,但是您可以使用str-replace函数来删除它们。

若要删除前面的(,请将str-replace函数更新为:

代码语言:javascript
复制
@function str-replace($string, $search, $replace: '') {
  $index: str-index($string, $search);

  @if $index {
    @return str-slice($string, 1, $index - 2) + $replace + str-replace(str-slice($string, $index + str-length($search)), $search, $replace);
  }

  @return $string;
}

然后更新这一行以删除尾随的),

代码语言:javascript
复制
  #{$vendor + "background-image"}:  str-slice($string, 1, -3);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50360020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档