【问题标题】:Css animation not working as it shouldCss 动画无法正常工作
【发布时间】:2015-07-15 18:23:00
【问题描述】:

我是一名开发人员,所以 CSS 不是我的强项,动画绝对不是。

但是,我正在尝试创建一个简单的动画 - 现在在某种程度上可以工作 - 只是不是我需要的:

    &:before
    {
        background-color:rgba(255,255,255,0.3);
        height:100%;
        transform:scale(0);
        width:100%;
    }

    &:hover, &:focus, &:active
    {
        &::before
        {
            .animation(ripple .4s ease-out);

            .keyframes(ripple; 
            {
                100%
                {
                    .transform(scale(1));
                }
            });
        }
    }

这个想法是,在悬停、聚焦或活动状态下,背景会从中心向外缩放 - 确实如此。

但是,当动画完成 - 并且背景已完全调整大小时,它会返回到其原始状态(消失),同时仍处于悬停状态。

我需要进行哪些更改以确保背景在对焦时仍然可见?

【问题讨论】:

  • 尝试添加animation-fill-mode:forwards 以使动画保持其最后一个关键帧的状态。此外,对于这种情况,您最好使用transition 而不是animations
  • @Harry - 就我提出的问题而言,这很好,但是一旦焦点被移除,背景就会消失。是否有可能以与分阶段相同的方式将其反转 - 换句话说,从 1 缩放回 0?
  • 是的,我预料到了这一点,这就是 transition 提供帮助而不是动画的地方。 Transition 默认提供两种操作,而animation 没有。看看this answerthis one
  • 后者是哈利的最佳选择 - 现在正在工作。如果您想发布作为答案,我会接受。

标签: css transform css-animations


【解决方案1】:

您可以使用forwards 并将transitionanimation 组合在一起以冻结一段时间:

a,
a:before,
a:after {
  display: inline-block;
}
a:before,
a:after {
  content: "\\o/";
  transform: scale(0);
  transition: 99999s;
  /* delay as much as possible return to normal */
}
a:hover:before,
a:hover:after {
  transition: 0s;/* reset transition timing */
  animation: grow 1s forwards;
  color: green;
}
@keyframes grow {
  100% {
    transform: scale(1);
  }
}
html {
  display: flex;
  height: 100%;
  width: 100%;
  font-size: 5em;
}
body {
  margin: auto;
}
<a href="#">link</a>

codepen to play with.

【讨论】:

  • 不确定这是否与我的浏览器版本有关(我使用的是旧版 Chrome v38),但在悬停时它仍然会立即消失。
  • @Harry ,您可以尝试使用供应商前缀,否则动画可能会覆盖过渡属性。悬停时动画保持在 100% 还是完成后消失?
  • 已经用免费前缀试过了。悬停时动画保持在 100%,但当我悬停时它变为空白。
  • 很抱歉,它也不适用于早期的 chrome。您可能需要一段 javascript 来覆盖它并切换正在运行/暂停的动画状态。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 2016-05-12
  • 1970-01-01
相关资源
最近更新 更多