网页环境动画设计:原则与实现(第一部分)
创造动效可能很棘手。过多会分散注意力,过少则让设计显得平淡。环境动画正是折中方案——通过微妙、缓慢移动的细节增添氛围而不喧宾夺主。在这篇文章中,网页设计先驱Andy Clarke介绍了环境动画的概念并解释了如何实现它们。
与基于时间线的动画(通过事件序列讲述故事)或交互式动画(在用户触摸时触发)不同,环境动画是被动运动,初看可能不会注意到,但它们能以微妙的方式让设计焕发生机。
在环境动画中,元素可能会微妙地变换颜色、缓慢移动或逐渐改变位置。元素可以出现和消失、改变大小或缓慢旋转。
环境动画不具有侵入性;它们不要求关注、不会分散注意力,也不会干扰用户使用产品或网站时的目标。它们也可以很有趣,当用户注意到时会心一笑。通过这种方式,环境动画为品牌个性增添了深度。
选择要动画化的元素
页面上或图形中的并非所有元素都需要移动,设计环境动画的部分关键在于知道何时停止。技巧在于选择本身就适合微妙移动的元素,而不是强行在不合适的地方添加动效。
自然运动提示
当决定要动画化什么时,我会寻找自然运动提示,并思考在现实世界中某物何时会自然移动。我会问自己:“这个东西有重量吗?"、“它灵活吗?“以及"它在现实生活中会移动吗?“如果答案是"是”,那么让它移动可能会感觉合适。
例如,Quick Draw正在抽的和平烟斗上挂着两根羽毛。当烟斗移动时,它们会左右摆动三度,就像真羽毛一样。
|
|
氛围而非动作
我经常选择能够增添氛围但不争夺注意力的元素或装饰性细节。环境动画不是向用户示意应该看哪里,而是关于创造一种情绪。
在这里,酋长在抽烟斗时缓慢而微妙地上升和下降。
|
|
趣味性与乐趣
环境动画最让我喜爱的一点是它们如何为设计带来趣味。它们是通过有趣细节展示个性的机会,让人们注意到时会心一笑。
仔细观察酋长,你可能会发现当他用力抽烟斗时,眉毛会抬起,眼睛会交叉。Quick Draw的眉毛也会在看似随机的时间间隔内弹跳。
牢记层次结构
运动会吸引眼球,即使微妙的移动也具有视觉重量。因此,我将最明显的动画保留给需要产生最大影响的元素。
抽烟斗显然对Quick Draw McGraw产生了很大影响,为了展示这一点,我将他的元素——包括烟斗和羽毛——包装在一个新的SVG组中,然后让这个组摇晃。
应用克制
仅仅因为某物可以动画化并不意味着它应该被动画化。在创建环境动画时,我会研究图像并记录那些微妙运动可能增添生机的元素。我牢记这些问题:“我要讲述的故事是什么?运动在哪些地方有帮助,何时可能变得分散注意力?”
请记住,克制不仅仅是少做,而是更少地做正确的事情。
分层导出SVG
当元素挤在单个SVG文件中时,导航可能是一场噩梦。定位特定路径或组可能感觉像大海捞针。
这就是为什么我分层开发SVG,一次导出一组元素并进行优化——始终按照它们在最终文件中出现的顺序。这让我可以通过将每个清理过的部分粘贴进来逐步构建主SVG。
我从导出背景元素开始,优化它们,添加类和ID属性,并将它们的代码粘贴到我的SVG文件中。
然后,我导出通常保持静态或作为组移动的元素,比如酋长和Quick Draw McGraw。
最后导出、命名并添加细节,比如Quick Draw的烟斗、眼睛和他陶醉的火花。
由于我从相同大小的画板导出每个图层,我不需要担心对齐或定位问题,因为它们都会自动就位。
实现环境动画
你不需要动画框架或库来向项目添加环境动画。大多数时候,你只需要一个准备充分的SVG和一些深思熟虑的CSS。
关键是逻辑地分组元素并给它们有意义的类或ID属性,这些属性在CSS中充当动画钩子。对于这个动画,我给每个移动部分都赋予了自己的标识符,如#quick-draw-tail
或#chief-smoke-2
。这样,我可以精确地定位所需内容,而无需像浣熊翻垃圾桶一样挖掘DOM。
SVG设置好后,CSS完成大部分工作。我可以使用@keyframes
实现更具表现力的运动,或使用animation-delay
模拟随机性和错开时间。技巧是保持一切微妙,并记住我不是为了吸引注意力而动画化,而是为了营造氛围而动画化。
请记住,大多数环境动画是连续循环的,因此它们应该轻量且对性能友好。当然,尊重要求减少运动的用户是良好实践。你可以将动画包装在@media prefers-reduced-motion
查询中,这样它们只在受欢迎时运行。
|
|
这是一个易于实现的小细节,它让你的设计更具包容性。
环境动画设计原则
如果你希望动画感觉像环境,更像是氛围而非动作,遵循一些原则会有所帮助。这些不是硬性规定,而是我在动画化烟雾、火花、眼球和眉毛时学到的东西。
保持动画缓慢平滑
环境动画应该感觉轻松,因此使用较长的持续时间并选择感觉有机的缓动曲线。我经常使用ease-in-out
,但当你想要更轻松的感觉和自然界中可能找到的运动类型时,三次贝塞尔曲线也可能有帮助。
无缝循环并避免突兀变化
硬重置或突然跳跃会破坏情绪,因此如果动画循环,请确保它平滑循环。你可以通过匹配开始和结束关键帧,或将animation-direction
设置为alternate
值来实现,这样动画会向前播放,然后向后播放。
使用分层构建复杂性
单个动画可能很无聊。五个微妙动画,每个在不同的层上,可以感觉丰富而生动。把它想象成构建声音混合——你希望在节奏、音调和时间上有变化。在我的动画中,火花以不同的间隔闪烁,烟雾向上卷曲,羽毛摇摆,眼睛瞪大。没有哪个动作占主导地位,每个运动都在场景中扮演着小角色。
避免分散注意力
环境动画的重点在于它不占主导地位。它是一个背景元素,而不是行动号召。如果某人的眼睛被抬起的眉毛吸引,那可能太过分了,所以调低动画直到它感觉像只有你真正看时才会注意到的东西。
考虑可访问性和性能
检查prefers-reduced-motion
,不要假设每个人的设备都能处理复杂的动画。SVG和CSS很轻量,但模糊滤镜和阴影以及复杂的CSS动画仍然可能给性能较低的设备带来负担。当动画纯粹是装饰性的时,考虑添加aria-hidden="true"
以防止它扰乱可访问性树。
环境动画就像佳肴上的调味料。它是你几乎注意不到的那撮盐,但没有时会想念。它不喊叫,而是低语。它不引导,而是徘徊。它是漂浮的烟雾、摇摆的羽毛和你眼角瞥见的火花。当做得好的时候,环境动画为设计增添个性而不要求掌声。