【问题标题】:Use different @keyframes based on parent element class根据父元素类使用不同的@keyframes
【发布时间】:2019-01-05 22:25:00
【问题描述】:

我有一个如下动画:

@keyframes pulseColorGreen {
    0% {
        background-color: green;
    }
    97%{
        background-color: green;
    }
    100% {
      background-color: white;
    }
  }

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

@keyframes pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }

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

.lightsOff .someclass{
    color: white
}

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

@keyframes .lightsOff pulseColorGreen {
    0% {
        background-color: darkgreen;
    }
    97%{
        background-color: darkgreen;
    }
    100% {
      background-color: black;
    }
  }

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

【问题讨论】:

  • 嗨,Kashyap。我注意到你的帖子就是我们所说的“健谈”。这意味着它们包含用于恳求帮助的寒暄和细枝末节。我们更喜欢这里没有的帖子,您可能会发现有时如果读者认为帖子太吵,他们会投反对票并继续前进。因此,如果您能以简洁为目标,我们将不胜感激。 Meta Stack Overflow 的参考讨论可应要求提供。

标签: html css css-animations keyframe


【解决方案1】:

您可以使用 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;
  }
}
<div class="box light">
  Class defined on the element
</div>
<div class="dark">
  <div class="box">
    Class defined on a parent element
  </div>
</div>

【讨论】:

  • 我之前探索过这个选项,但是 IE 不支持 CSS 变量(如果有错误请纠正我)。我想要一个支持至少 2-3 年旧浏览器的跨浏览器解决方案
  • @KashyapKotak 啊!如果您正在寻找 IE 支持,那么我认为唯一的方法就是像您说的那样......更改您的 JS 代码以识别每个案例
  • 我没有用 IE 测试我的网站。在这里发表评论后,我第一次在 IE 中打开它,发现很多东西都不起作用 :P 所以我可以离开 IE。但我在caniuse.com/#feat=css-variables 页面上看到“在 Edge 15 中带有 css 变量的动画可能会导致网页崩溃”。不过,我肯定想支持 EDGE。如果我需要担心该链接上给出的问题,请告诉我
  • @KashyapKotak 是的,这个链接非常可靠,所以如果你在那里找到一些东西,你应该考虑它,但你也应该按照错误的链接来确切地知道错误是什么及其当前状态.. . 可能这是您没有遇到的特殊情况
猜你喜欢
  • 2014-09-08
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多