媒体查询后css动画未触发

时间:2019-05-19 13:19:09

标签: html css media-queries css-animations

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

<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;
    }
}

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

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

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

如果我刷新页面,但是如果我调整屏幕大小,此动画将无法播放。当屏幕像以前一样调整大小时,它应该播放动画

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

需要任何帮助

https://jsfiddle.net/7pk6yncd/

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

您不能将@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;
        }
    }