带有 CSS 动画的媒体查询

Posted

技术标签:

【中文标题】带有 CSS 动画的媒体查询【英文标题】:Media queries with CSS animations 【发布时间】:2012-01-01 15:26:53 【问题描述】:

我在这里尝试了一些繁重的 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?

【问题讨论】:

【参考方案1】:

我假设您正在为可能具有 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/

【讨论】:

【参考方案2】:

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

【讨论】:

以上是关于带有 CSS 动画的媒体查询的主要内容,如果未能解决你的问题,请参考以下文章

css CSS - 动画媒体查询

css 带有模板区域和媒体查询的CSS网格

如何在带有 javascript 条件的媒体查询中使用 css?

可以使用带有 CSS ::after 和 ::before 标签的媒体查询吗?

带有媒体查询的 chrome 中的错误

如何在媒体查询中正确切换此动画关键帧?