如果您在某个元素上应用了特定支持属性的 过渡,并且该属性曾经发生变化,它将使用该过渡。如果该元素上的类名发生变化,并且新类更改了该属性,它将过渡(假设该类的作用不是删除过渡)。如果 JavaScript 从字面上更改该样式属性,它将过渡。
同样,如果新的媒体查询生效,并且该媒体查询中包含某些内容更改了该元素上的该属性,它将过渡。 因此,与其说存在“动画媒体查询”,不如说当新的媒体查询开始影响页面时,元素只是按预期过渡。
简单示例
.thing-that-moves {
position: absolute;
width: 100px;
height: 100px;
background: red;
top: 0;
left: 0;
transition: left 0.5s; /* BYO prefixes */
}
@media (min-width: 400px) {
left: 50px;
}
@media (min-width: 600px) {
left: 100px;
}
如果您要在这些断点之间调整浏览器窗口的大小,您会看到一个红色正方形作为响应四处移动。
稍微复杂一点的布局示例
在 CSS-Tricks 的几个版本之前,我有一个搜索表单,它会使用这种精确的技术缓慢地浮动到指定位置。我在这里在一个相对简单的布局中重新创建了它,其中其他一些内容也会过渡。
查看 Chris Coyier 在 CodePen 上的笔 动画媒体查询(@chriscoyier)。
您可能最适合在 全页面视图 中查看它。
动画 GIF 演示效果

附言:LICEcap 非常适合创建类似的 GIF。
我还能做什么?
这里的天空是无限的。它只是 CSS。更改和转换您想要的任何内容。在 CSS-Tricks 的另一个版本中,我 绘制了 来自 Treehouse 的 Mike 青蛙,使用简单的 CSS 形状。当不同的媒体查询生效时,Mike 会 改变形状、颜色、表情和位置——通过过渡缓慢地变形到下一个状态。它很受欢迎!
浏览器支持情况如何?
IE 9+ 支持媒体查询。IE 10+ 支持过渡。我不太担心过渡,因为它们仅仅是装饰作用(如果它们不过渡,也没关系,它们仍然会移动)。如果您需要更深入的媒体查询支持,始终可以使用 Respond.js。
这样做有什么实际意义吗?
为了好玩,伙计。这纯粹是为了娱乐。它可以作为一个小小的点缀,让您的网站充满活力。很难为此制定商业案例,但如果您的性能预算没有几个字节用于娱乐,我替你感到难过,孩子。
需要注意什么吗?
如果样式表解析得足够快,并且过渡在页面 仍在布局 时应用于元素,这些过渡可能会有点令人讨厌。您可能希望 仅在页面加载后 应用它们。
谢谢!它看起来不错,也很有用。
我之前尝试过这些,我认为它们非常酷。但是,它们不实用,除非您正在测试媒体查询,否则谁会真的在 < 500px 的情况下使用他们的浏览器?因此,一旦它在页面上以所需的宽度加载,您就不会获得效果。仍然很酷。
我发现将其应用于屏幕方向更改事件可以在手机上产生很好的效果。
同意,除了其他开发人员想要查看网站是否具有响应性之外,我看不出谁会看到这些……
不过,我确实很喜欢 Drazen 的观点。
我认为小于 600-700px 的查询在某些情况下始终有用,例如,如果有人希望将浏览器与其他内容并排加载。但是,毕竟这取决于您的网站用途 :)
喜欢这个技巧,我很高兴看到该示例使用的是特定的
transition-property
而不是all
。基于 MQ 的最佳过渡是特定且受控的。使用all
会导致更令人困惑(以及更卡顿)的过渡,因为许多属性会同时过渡。关于:^^ <– 上述帖子。——您将如何使浏览器最后加载样式表?
我认为如果您可以使媒体查询在普通页面加载后生效,这些效果看起来会很酷?这可能吗?
完全不相关的评论:我喜欢您使用“Cow Farted”和“Cow Farted Again”作为标题,以及“funcandy”。好文章,好词。
有趣的效果。也许过渡可以更快一点 http://codepen.io/grayghostvisuals/pen/jsite。还在思考 translate 是否也能起作用,因为每次浏览器调整大小时,整个页面及其各个部分都必须重新绘制(在那个笔中,我为搜索框使用了 translate 而不是 left。感觉仍然很像旺卡,我认为它需要 translateZ hack 来放置在它自己的图层上并避免绘制)。
顺便说一句,这只奶牛需要大量服用 Pepto。这里有一篇关于此问题的优秀文章,供奶牛阅读 http://drbenkim.com/articles-gas.html。消化不良和胀气可不是闹着玩的。
我非常喜欢不同部分具有不同时间时的情况,这样它们就会在不同的时间落位。
但是为什么我在媒体查询中需要过渡效果?人们在台式机、平板电脑或手机上打开网站,动画效果有什么用?它在所有地方都没有用,只有在通过拖动浏览器查看台式机版本时才能看到。我错了吗?谢谢
当您旋转手机时,视口宽度会发生变化,然后您将看到此动画。
您没有错。请参阅上面文章中的“这样做有什么实际意义吗?”部分。
例如,让我们以一个正在运行 Windows 7 的用户为例。他们将您的网站固定在侧面(并且它仍然看起来很棒,因为它具有响应性),并将另一个程序固定在另一侧。也许他们关闭了那个其他应用程序并全屏显示了他们的浏览器,然后看到了元素增长、移动或任何其他操作的良好过渡。对于他们的体验来说,这并非完全必要,但它很好(尽管我相信网站内的动画和交互对于成功的、引人入胜的体验至关重要)。
这里的小技巧不错,我每天都有幸使用媒体查询过渡!:)
我想一个潜在的商业案例可能是,您正在指示页面上某个重要元素(在本例中为搜索框)移动到的位置。特别是当我们开始使用 CSS 区域/弹性盒子等创建复杂的布局时,不同屏幕尺寸下的外观差异很大,这可以减轻用户的困惑。尽管有点牵强。
不错的视觉效果!
我肯定会在我的下一个响应式项目中编写类似的代码。
我认为,有一种更简单的方法
屏幕截图:这里
稍微具体一点,
这效果非常好,期待将其用于手机方向变化。
对于那些希望对所有元素应用 CSS 过渡的人,我想说这有点过头了,只会让人感觉视觉体验非常缓慢。
它对一些元素很有用,但是当每个元素都需要花费半秒或更长时间进行过渡时,我觉得 UI 会看起来像某种“慢动作”效果。
我之前尝试过几次对“布局”媒体查询(列宽/填充/边距等)进行动画/过渡,并注意到在设备方向发生变化时,过渡经常会导致布局中断,我假设这是因为方向变化所需的时间与过渡时间冲突。
出于这个原因,我不使用它们,或者禁用支持方向变化的设备上的这些过渡。
第一次评论,喜欢你的页面,你的忠实粉丝,等等…
我整篇文章都在想“这是为了什么?”,最后我看到了“为了好玩,伙计们。”,所以我很欣慰,我不是唯一一个做一些没有实际用途的事情的人。为艺术而艺术。
但是,这似乎不适用于弹性盒子属性。我尝试在较小视口中从 flex-direction 行更改为列时执行此操作,但没有成功。
过渡/动画通常仅适用于值为数字、长度或颜色的属性。http://oli.jp/2010/css-animatable-properties/
有趣的工作!!!
是的..我不确定这些是为谁准备的?普通用户会经常调整浏览器大小到需要这种效果的程度吗?
或者这只是为开发者准备的?
查看上面文章中的“这样做有实际原因吗?”部分。
我会添加
.search input {
width: 100%;
}