在Sass中将变量设置为@mixin?

Posted

技术标签:

【中文标题】在Sass中将变量设置为@mixin?【英文标题】:Setting variable to @mixin in Sass? 【发布时间】:2012-04-18 20:53:21 【问题描述】:

有没有办法将@include mixin(); 设置为变量? 我试过这个

@mixin bg-gradient($fallback, $type, $positionX, $positionY, $from, $from-percent, $to, $to-percent)
    background: $fallback;
    background: -webkit-#$type-gradient($positionX $positionY, $from $from-percent, $to $to-percent);
    background:    -moz-#$type-gradient($positionX $positionY, $from $from-percent, $to $to-percent);
    background:         #$type-gradient($positionX $positionY, $from $from-percent, $to $to-percent);


$navBg: @include bg-gradient(#eee, radial, top, center, #999, 0%, #555, 100%);
body  $navBg;  // it gave me an error

【问题讨论】:

【参考方案1】:

我不知道有什么特别的方法可以做到这一点,但是如果你只是想在那种特定类型的渐变上干燥你的设置,你可以为它编写一个包装器 mixin:

@mixin navBg() 
    @include bg-gradient(#eee, radial, top, center, #999, 0%, #555, 100%);

body  @include navBg; 

编辑

Here 是 SASS 变量支持的数据类型列表。既不包括 mixin 调用,也不包括它们的结果(整个 CSS 规则)。我还尝试将 include 视为字符串并对其进行插值,但这仅适用于最终结果 CSS,不适用于进一步的指令。

【讨论】:

感谢您的解决方案和更多信息!我真的很感激【参考方案2】:
@mixin gradient ($place, $bcolor1, $bcolor2)`<br>`
  background-image: linear-gradient($place, $bcolor1, $bcolor2)`<br>`
  background-image: -o-linear-gradient($place, $bcolor1, $bcolor2)`<br>`
  background-image: -moz-linear-gradient($place, $bcolor1, $bcolor2)`<br>`
  background-image: -webkit-linear-gradient($place, $bcolor1, $bcolor2)`<br>`
  background-image: -ms-linear-gradient($place, $bcolor1, $bcolor2)`<br>`


body
  @include gradient(bottom, #F90000 18%, #FF4C4C 66%)

【讨论】:

【参考方案3】:

如果您尝试将返回值设置为 SASS 变量,则需要使用 @function,而不是 @mixin。这让我挂了一会儿,不知道@function。比如……

@function font($font-size, $line-height: 1.4, $font-family: Arial) 

    @if $line-height == 1.4 
        $line-height: round($line-height*$font-size);
    

    @return #$font-size/#$line-height $font-family;


$font-medium: font(20px);

顺便说一句,虽然这并没有解决这个用户正在寻找的确切内容,但这是互联网搜索中唯一弹出的关于将 var 设置为 mixin 的内容,所以我想在这里分享这个让其他人知道如果出现这种情况怎么办。

【讨论】:

这对 OP 的用例没有帮助,因为他们不期望单个返回值。 为什么要创建一个带有硬编码值的function?有点失败是吧?

以上是关于在Sass中将变量设置为@mixin?的主要内容,如果未能解决你的问题,请参考以下文章

如何将表达式传递给使用 Sass 变量的 calc() mixin

如何将表达式传递给使用 Sass 变量的 calc() mixin

SASS - 将 $variable 从@mixin 中传递给@content

scss 设置功能mixins sass

scss Sass mixin用于设置默认rem字体大小

scss Sass功能和mixin用于设置对比背景和前景色