【问题标题】:css animation not triggering after media query媒体查询后没有触发css动画
【发布时间】:2019-05-19 23:26:07
【问题描述】:

我有一个看起来像这样的列表

<ul class="timeline-container">
   <li class="timeline-item-container">
       <div class="timeline-item></div>
   </li>
   <li class="timeline-item-container">
       <div class="timeline-item></div>
   </li>
</ul>

我声明了 2 个动画

    @keyframes slideLeft
    {
        from {
            transform: translateX(1000px);
        }

        to {
            transform: translateX(0);
        }
    }

    @keyframes slideRight
    {
        from {
            transform: translateX(-1000px);
        }

        to {
            transform: translateX(0);
        }
    }

然后在我的 css 上我有这个:

.timeline-item
{
    animation: slideRight .6s ease both;

    @media (max-width:767px)
    {
        animation: slideLeft .6s ease both;
    }
}

所以这很完美,我列表中的所有项目在屏幕小于 767 像素时从右侧滑入,当屏幕更大时从左侧滑入。当我调整屏幕大小时,动画再次播放。

现在我希望列表中的每个奇数项目在屏幕大于 767 像素时从右侧滑入,所以我添加了这个:

.timeline-item-container:nth-child(even) .timeline-item
{
   @media (min-width:767px)
   {
        animation: slideLeft .6s ease both;
   }
}

这在我刷新页面时有效,但如果我调整屏幕大小,动画不会播放。它应该像以前一样在屏幕调整大小时播放动画

我知道动画在那里,因为如果我刷新它,它就会播放,而不是在我调整屏幕大小之后

任何帮助都是appriciated

https://jsfiddle.net/7pk6yncd/

【问题讨论】:

  • 你能创建工作示例吗?
  • @TemaniAfif 嗨,我已经包含了一个 jsfiddle,因为您可以看到动画在运行时正常工作,但是当您调整大小时,只有 1 次运行
  • 它工作正常,如果你调整小提琴的大小,它会重复
  • @TemaniAfif 您在使用 chrome 吗?也许它只是我的电脑。对我来说,在我来回调整大小时,顶部栏根本没有动画
  • 啊,你要再次触发同样的动画吗?

标签: html css media-queries css-animations


【解决方案1】:

我认为唯一的方法是用不同的名称定义两次相同的动画。实际上您使用的动画是相同的,因此媒体查询不会再次触发它。

.box {
  background:red;

  animation:fromLeft 2s linear forwards;
}

@media all and (max-width:600px) {
.box {
  background:blue;
  display:block;
  animation:fromLeft-alt 2s linear forwards;

}

}

@keyframes fromLeft {
   from {
     transform:translateX(-100%);
   }
}
@keyframes fromLeft-alt {
   from {
     transform:translateX(-100%);
   }
}
<div class="box">
  some content
</div>

【讨论】:

  • 啊,这很有道理,我可以把它定义为一个不同的名字,完美,谢谢!
【解决方案2】:

您不能将 @media 放在 css 规则中。

它的工作方式是相反的,你去:

    .timeline-item
    {
        animation: slideRight .6s ease both;

    }

    @keyframes slideLeft
    {
        from {
            transform: translateX(1000px);
        }

        to {
            transform: translateX(0);
        }
    }

    @keyframes slideRight
    {
        from {
            transform: translateX(-1000px);
        }

        to {
            transform: translateX(0);
        }
    }

    @media (max-width:767px)
    {
        .timeline-item{
            animation: slideLeft .6s ease both;
        }
        .timeline-item-container:nth-child(even) .timeline-item
        {
                animation: slideRight .6s ease both;
        }
    }

【讨论】:

  • 嗨,我正在使用 sass,所以媒体查​​询在类中工作。我已经在外面尝试过,但我仍然遇到同样的问题。
  • @RachelDockter,好的。 Sass 不是动态的。您将无法实时生成 CSS 属性和值或为其设置动画。但你可以用更有效的方式生成它们,并让标准属性(例如 CSS 动画)
猜你喜欢
  • 1970-01-01
  • 2012-01-01
  • 2020-03-07
  • 2011-09-21
  • 1970-01-01
  • 2014-08-10
  • 2022-11-16
  • 2016-12-12
  • 1970-01-01
相关资源
最近更新 更多