使用CSS动画进行媒体查询

时间:2011-11-18 21:55:25

标签: css animation css3 media-queries css-animations

我正在尝试一些沉重的CSS3内容并遇到一些我希望可以解决的问题:

1 - 我有一个载入页面时滑入的框。让我们说:

#box {
    animation-duration: 3.5s;  
    animation-name: slidein;
}

@keyframes slidein {  from { top: 0; }  to { top: 100%; }}

但是,在我的媒体查询中,由于一些调整大小,我需要将其修改为:

@media only screen and (min-width: 768px) {
    @keyframes slidein {  from { top: 0; }  to { top: 80%; }}
}

我认为我可以保持动画名称相同,只是重新定义其中一个@media查询中的关键帧,但这似乎不起作用。为什么? (是的,我设置了正确的前缀)

2 - 我上面的解决方案是为每个尺寸定义不同的动画:

#box {
    animation-duration: 3.5s;  
    animation-name: slidein;
}

@keyframes slidein {  from { top: 0; }  to { top: 100%; }}
@keyframes slidein-low {  from { top: 0; }  to { top: 80%; }}

@media only screen and (min-width: 768px) {
    #box { 
        animation-name: slidein-low;
   }
}

然而,现在,在调整网站大小时,动画将在点击其中一个媒体查询后重新开始。我只希望动画播放一次(无论大小如何,甚至随后调整大小),就是这样。因此,除非有#1的解决方案,我相信这是因为当检测到查询时,它有点“重新启动”它的CSS?

2 个答案:

答案 0 :(得分:0)

我假设你正在为可能最大宽度为1024的小屏幕做最小宽度?所以也许试着把它放进去:

@media only screen and (min-width: 768px) and (max-width:1024px) {
    #box { 
        animation-name: slidein-low;
   }
}

甚至可以尝试将动画构造放在查询中:

@media only screen and (min-width: 768px) and (max-width:1024px) {

    @keyframes slidein-low {  from { top: 0; }  to { top: 80%; }}

    #box { 
        animation-name: slidein-low;
   }
}

我确定你遇到过这个网站,但万一你还没有对媒体查询有很好的参考:

http://stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries/

答案 1 :(得分:0)

从我的实验中,我发现Safari 5(适用于桌面和iOS)肯定会以您打算使用其中一个解决方案的方式呈现您的页面。另一方面,Firefox 9似乎不尊重@ -moz-keyframe或-moz-animation规则,如果它们放在@media块中(并且都忽略了W3C @keyframe和非特定于供应商的动画属性)