【问题标题】:Passing value from a mixin to a class, using escaped characters使用转义字符将值从 mixin 传递给类
【发布时间】:2018-09-01 08:12:08
【问题描述】:

我有一个添加后粒子的地图生成器:

@mixin generator {
  @each $key, $value in $config {
        $infix: '\@#{$key}' !global;
        @content
      }
    }

我在多种情况下使用了上面的mixin,在末尾添加了粒子,比如:

.y- {
  @include generator {
    &-n#{$infix} {
      display: none !important;
    }
    &-in#{$infix} {
      display: inline !important;
    }
  }
}

我收到以下错误:

“&-none”后的 CSS 无效:预期选择器是“@”\n

我想要的是:

.y-n@key_name1{
    display: none !important;
}

.y-n@key_name2{
        display: none !important;
    }

这仅在我使用\@ 时出现。

我可以在创建类时添加这个粒子,但是就像我说的我想在多种情况下使用它并根据条件改变粒子,所以我需要在 mixin 中。

【问题讨论】:

  • 我可以帮忙,但你打电话给@include utility_generator,但你的@mixingenerator?您是否故意运行循环?这些是错别字吗?
  • 谢谢,已编辑,只是复制粘贴错误,名称应该相同。是的,我故意运行一个循环;我想在类名末尾添加多个“字符串”
  • 我和你一起,你想遍历一个数组并输出类中的键,给我几分钟

标签: css sass scss-mixins


【解决方案1】:

所以这行得通...

$config: (
  1: 'a',
  2: 'b',
  3: 'c'
);

@mixin generator {
  @each $key, $value in $config {
        $infix: '-#{$key}' !global;
        @content
      }
    }

.y- {
  @include generator {
    &-n#{$infix} {
      display: none !important;
    }
    &-in#{$infix} {
      display: inline !important;
    }
  }
} 

看到这个萨斯迈斯特https://www.sassmeister.com/gist/324c3c0003a91eb676b00dfe1877cae0

但只要你添加..

\@

..到你的$infix 变量键字符串,它会抛出一个错误!

$infix: '\@#{$key}' !global;

我认为是 \@ 破坏了你的 sass/css。

如果您看到What is the purpose of the '@' symbol in CSS? 问题,您只能将@ 符号用于(示例)...

/* Import another stylesheet from within a stylesheet */
@import url(style2.css);

/* Apply this style only for printing */
@media print {
    body {
        color: #000;
        background: #fff;
    }
}

/* Embed a custom web font */
@font-face {
    font-family: 'DejaVu Sans';
    src: local('DejaVu Sans Regular'), url(/fonts/DejaVuSans.ttf);
}

也许放弃\@,你的 sass 会正常运行吗?

【讨论】:

  • 它不起作用,问题出在特殊字符上。如果我更改您的代码: $infix: '\@'; ,会像我的代码一样引发错误;我需要一些东西来告诉 sass,不要解释/解析把它当作一个字符串
  • 查看更新的答案,尽管它的回答很好。我只是确定@content 可以传递变量。从逻辑上讲,您认为它会允许它。
  • 刚刚修正了我所有的错别字对不起
  • 是的,问题不在于我的 mixin,而在于 @ 符号。我找到的解决方案是使用 \\@;我正在测试使用 @ 来定义媒体查询类,例如 col-7@sm
猜你喜欢
  • 1970-01-01
  • 2021-10-01
  • 2017-10-31
  • 1970-01-01
  • 2018-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多