我有一个看起来像这样的列表
<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;
}
}
如果我刷新页面,但是如果我调整屏幕大小,此动画将无法播放。当屏幕像以前一样调整大小时,它应该播放动画
我知道动画在那里,因为如果刷新它,它就会播放,而不仅仅是在我调整屏幕大小之后
需要任何帮助
答案 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;
}
}