首页 > 解决方案 > 媒体查询后没有触发css动画

问题描述

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

<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 像素时,我列表中的所有项目从右侧滑入,当屏幕更大时从左侧滑入。当我调整屏幕大小时,动画再次播放。

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

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

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

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

任何帮助都会得到帮助

https://jsfiddle.net/7pk6yncd/

标签: htmlcssmedia-queriescss-animations

解决方案


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

.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>


推荐阅读