1

我有这个 SASS mixin 应该使按钮闪烁:

@mixin background_animation($color) {
  -webkit-animation: backgroundAnimation 800ms infinite;
  @-webkit-keyframes backgroundAnimation {
    0%      {background-color: $color;}
    50%     {background-color: red;}
    100%    {background-color: $color;}
  }
}

我这样使用它:

@include background_animation(#000000);

但是,它不起作用。按钮的背景颜色不会闪烁。

谁能告诉我我在这里缺少什么?

PS 当不将其作为 mixin 包含时,该代码可以正常工作。

生成的 CSS 如下所示:

-webkit-animation-delay: 0s;
-webkit-animation-direction: normal;
-webkit-animation-duration: 0.800000011920929s;
-webkit-animation-fill-mode: none;
-webkit-animation-iteration-count: infinite;
-webkit-animation-name: backgroundAnimation;
-webkit-animation-timing-function: cubic-bezier(0.25, 0.1, 0.25, 1);

... other rules omitted for brevity
4

1 回答 1

2

SASS 在编译后没有产生预期的结果。这就是你得到的错误:

.box {
  -webkit-animation: backgroundAnimation 800ms infinite;
}
@-webkit-keyframes backgroundAnimation {
  .box 0%  {
    background-color: black;
  }
  .box 50%  {
    background-color: red;
  }
  .box 100%  {
    background-color: black;
  }
}

用法:

.box {
    @include background_animation(#000000);
}

基本上你不想要关键帧的 .box 选择器。

这是工作演示(Chrome)

更新

你在这里采取了稍微错误的方法。试试这个代码片段:

@mixin keyframes($animation-name) {
  @-webkit-keyframes $animation-name {
    @content;
  }
  /*
  Other browser prefixes here
  @-moz-keyframes $animation-name {
    @content;
  }*/
}

@mixin animation($str) {
  -webkit-animation: #{$str};
}

@include keyframes(background_animation) {
  0%      {background-color: red;}
  50%     {background-color: green;}
  100%    {background-color: blue;}
}

div {
  @include animation('background_animation 800ms infinite');
}

它应该编译成这样:

@-webkit-keyframes background_animation {
  0% {
    background-color: red;
  }

  50% {
    background-color: green;
  }

  100% {
    background-color: blue;
  }
}
/*
Other browser prefixes here
@-moz-keyframes $animation-name {
  @content;
}*/
div {
  -webkit-animation: background_animation 800ms infinite;
}

这会在 chrome 中产生这个结果。

于 2013-10-22T19:28:27.073 回答