根据父元素类使用不同的@keyframes

Kas*_*tak 4 html css keyframe css-animations

我有一个像下面这样的动画:

@keyframes pulseColorGreen {
    0% {
        background-color: green;
    }
    97%{
        background-color: green;
    }
    100% {
      background-color: white;
    }
  }
Run Code Online (Sandbox Code Playgroud)

我的网站也有一个黑暗模式,背景变成黑色。现在在动画中,我想显示深绿色,如下所示:

@keyframes pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }
Run Code Online (Sandbox Code Playgroud)

对于暗模式,我在 body 标签中添加了一个类“lightsOff”。我正在使用目标元素类和“lightsOff”类的组合来管理所有其他颜色变化,就像:

.lightsOff .someclass{
    color: white
}
Run Code Online (Sandbox Code Playgroud)

但是当在 css 文件中定义一个元素时:

@keyframes .lightsOff pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }
Run Code Online (Sandbox Code Playgroud)

它给我错误说“预期的标识符”。我正在从 javascript 动态地向元素添加动画名称属性。因此,我不喜欢更改 JS 代码来识别当前设置的主题并相应地设置关键帧。我怎样才能做到这一点?

Tem*_*fif 5

您可以使用 CSS 变量,并且您只需要一个不需要更改的关键帧。只需更改定义颜色的主类:

.light {
  --c: yellow;
}

.dark {
  --c: darkblue;
}

.box {
  height: 100px;
  margin: 5px;
  box-shadow: 0 0 5px var(--c);
  color:#fff;
  animation: pulseColorGreenMkt 1s infinite linear alternate;
}

@keyframes pulseColorGreenMkt {
  0% {
    background-color: var(--c);
  }
  100% {
    background-color: black;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div class="box light">
  Class defined on the element
</div>
<div class="dark">
  <div class="box">
    Class defined on a parent element
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)