Pasquale D’Silva 的文章 过渡界面 真的在广为流传。这是一篇简短易读的文章,阐明了一个重要的观点。过渡和动画不仅仅是视觉效果,它们还可以帮助你的大脑了解页面上正在发生的事情。
如果将一个列表项插入到列表中,与其让它突然出现,不如使用一个动画将列表移动以腾出空间,这样会非常清楚地表明发生了什么。否则,它会一闪而过,让你来不及反应。
文章中的动画 GIF 使其变得非常直观,所以 去看看吧。
Pasquale 并不是说“每次都必须这样做!”,但它们是很好的例子,所以我想尝试一下如何在 Web 上实现它们。
Check out the coded examples of transitional interfaces on CodePen.
没有什么突破性的东西,但有一些技巧在起作用。
在添加列表项的示例中,通过首先将列表项设置为 max-height: 0;
并让 @keyframes 动画运行在它们上面来扩展 max-height
到 50 来在列表中腾出空间。请注意,确保该数字足够高,以覆盖文本合理放大的空间。
@keyframes
只有 to { }
代码块。当省略 from { }
或 0% { }
代码块时,它只是从动画属性的自然值开始。这里使用高度、不透明度和缩放来使它弹出到位。
.new-item {
max-height: 0;
opacity: 0;
transform: scale(0);
animation: growHeight 0.2s ease forwards;
}
@keyframes growHeight {
to {
max-height: 50px;
opacity: 1;
transform: scale(1);
}
}
在滑入示例中,首先在列表中创建空间,然后将项目滑入该空间。这是通过使用两个不同的 @keyframe 动画来完成的。一个用于创建空间,另一个用于执行滑动。您可以将它们都应用于单个元素,并间隔开它们运行的时间。
.new-item {
max-height: 0;
opacity: 0;
transform: translateX(-300px);
animation:
openSpace 0.2s ease forwards,
moveIn 0.3s 0.2s ease forwards;
}
@keyframes openSpace {
to {
max-height: 50px;
}
}
@keyframes moveIn {
to {
opacity: 1;
transform: translateX(0);
}
}
第二个 animation
值具有第二个时间参数,即延迟。延迟与第一个动画的持续时间相同。因此它们按顺序运行。
在弹出详细信息视图示例中,列表项的大小通过使用 transform: scale(X);
来增长。在其后面,列表通过也使用缩放变换隐藏在视图之外。它使自身变得更小并隐藏在扩展的列表项后面,该列表项将其自身变换成自身大小的许多倍来进行补偿。
我正在做类似的事情,看来你完成得更快了(该死的腱鞘炎!)
http://codepen.io/varemenos/pen/fhakE
既是一个可爱的想法,也是一个漂亮的代码。
感谢您提供关于过渡界面的链接;看来我错过了它。很高兴我能弥补这个错误,这是一篇很棒的文章!
非常好!
我喜欢其中的一些,不喜欢另一些。我对动画的主要挫折感是它们速度太慢,而不用动画会快得多。
例如最后一个列表项。感觉比一个简单的盒子弹出要慢得多。而第二个示例感觉很快,我不介意动画,因为它并没有阻止我实际采取行动。
缓慢的动画限制了用户执行操作的速度,因此它们最终会成为障碍。如果您打算使用动画来为您的界面创建个性,请确保它尽可能短,以免减慢用户的速度。
是的,最后一个(详细信息视图脑洞 #2)在我的 Win 8/Chrome 上真的很慢。其他所有都非常流畅。
感谢您将这个想法转化为代码。很棒的东西!
这是一篇很棒的文章,感谢分享。
不能过渡到
height: auto
真是太烦人了。将max-height
设置为某个大于可能值的数值可以工作,但这是一种变通方法,迫使我在代码中嵌入魔法数字。不幸的是,100% 无法用作max-height
过渡的值(我不确定为什么)。但是,您可以删除一个魔法数字的地方是
transform: translateX(-300px);
,您可以在其中将300px
替换为-100%
。毕竟,这正是您想要实现的目标 :)同意。据我所知,这最终会得到修复。
这是我为动态高度过渡做的小技巧。
li:animation
transition: height .4s cubic-bezier(1,0,0,1);
li.show
max-height:3300px;
演示?
仅仅使用 CSS 动画就能做到这些,真是太神奇了。干得好!
感谢 Chris 分享有用的想法和代码,我正在做一个项目,我在正确的时间找到了你的博客。:)
喜欢水平滑动列表摘要示例 <3
通过向活动元素添加一个特殊的类,也可以使用 CSS 过渡来实现。
在台式机上运行良好!我喜欢它!不过我在 iPad 上遇到了麻烦。Safari 似乎跟不上动画,每次我添加列表项时屏幕都会闪烁。
很棒的东西,我会用其中的一些。感谢分享 :)
这是一种非常有效的方法,除了我不得不打开 Firefox 才能看到它。我使用的是 IE 9,新框甚至没有显示出来。也许需要在某个地方添加一个 IE 修复程序(或者可能是工作电脑的问题)?
IE 修复程序是一个非常糟糕的主意。但是,对于现实生活中的用例,可能需要一些功能检测。
当我尝试使用 IE 在我的另一份工作中添加项目时,项目甚至没有添加。框向下移动了几像素,什么也没有显示出来。因此需要修复。
在界面中添加第四个维度是一个令人着迷的概念,值得进一步探索。感谢这些示例。
这里的工作很棒。像这样的技巧真的开始流行起来,我迫不及待地想在一些优秀的网站上看到它们。
如果只是扩展最大高度,为什么要使用关键帧动画而不是 CSS 过渡?
(我想我是在问,假设您没有执行缩放动画,关键帧动画或过渡哪个更有效?)
刚刚发现了一个小打字错误
“这是一篇简短易读的文章”
哇……漂亮……浏览器支持情况如何?