如果你在某个网站上遇到一些元素会随着你在屏幕上的动作而动态变化,你可能会想在你自己的网站上添加类似的效果。这样的效果可以使您的网站具有交互性,并有助于提高用户体验

在您开始创建它们之前,您必须了解这些效果到底是什么。在设计领域,它们要么被分类为过渡,要么动画

在这篇文章中,我们将定义过渡和动画,并解释它们的区别。

现在下载:免费HTML和CSS入门指南

很容易混淆CSS过渡和动画,因为它们让你做类似的事情。以下是一些例子:

  • 您可以可视化属性更改。
  • 您可以设置easing函数来控制属性值的更改速率。
  • 您可以设置过渡或动画的持续时间。
  • 您可以指定解释更改并启动响应的属性。
  • 您可以收集有关导致过渡或动画启动的事件的数据,并使用它来改进您的营销活动。

尽管它们有相似之处,但过渡和动画是不同的,它们都有优点和缺点。下面简要介绍一下它们的区别:

CSS转换 CSS动画
  • 只能从初始状态移动到最终状态-没有中间步骤
  • 只能跑一次
  • 需要一个触发器来运行(比如鼠标悬停)
  • 触发时向前运行,移除触发器时反向运行
  • 使用JavaScript更容易
  • 最适合创建从一个状态到另一个状态的简单更改
  • 能从初始状态移动到最终状态,中间有中间步骤吗
  • 可以无限循环感谢动画-迭代-计数属性
  • 可以触发但也可以自动运行
  • 可以向前跑,反向跑,或者交替跑
  • 使用JavaScript更困难
  • 最适合创造一系列复杂的动作

这里有一个简单的方法来可视化CSS过渡和动画之间的主要区别:

过渡与动画CSS

在你决定哪个适合你的网站之前,你需要更好地理解过渡或动画在你的网站上是如何工作的。让我们仔细看看。

CSS转换

如果你只是想在你的网站上做一个简单的操作,过渡是最简单的方法。转换连接到触发操作—最常见的是当鼠标悬停在一个元素上时。在这种情况下:徘徊伪类用于更改CSS属性值,使元素按所需作出反应。

您可以设置元素以更改其颜色规模,或位置.你也可以旋转,翻译对象。如果你想要一个更复杂的转换,甚至可以同时影响多个属性。例如,如果你想要你的过渡改变背景颜色和宽度,你可以为两者指定条目背景颜色宽度属性。

CSS转换属性

要创建转换,可以使用转换简写属性,或以下子属性的组合。

  • 转换属性指定用于转换效果的CSS属性的名称。例如,如果这个属性被设置为“width”,那么当用户将鼠标悬停在元素上时,它的宽度开始改变,就会发生过渡效果。
  • transition-duration指定完成转换效果所需的时间长度。
  • transition-timing-function设定过渡效应的速度。
  • transition-delay指定转换效果何时开始。

CSS过渡和JavaScript

CSS中预定义的属性值可能会限制某些交互。在这种情况下,您可能需要求助于JavaScript。但如果您不想完全使用JavaScript,则可以设置一种混合方法。

如果您决定使用JavaScript管理更困难的方面,那么这种转换可能是理想的。

CSS转换的例子

过渡可能很有用,但比CSS动画更基础。让我们来看几个例子。

请注意:下面的例子只是循环播放,因为它们是动图。记住:转换不能无限循环。

悬停拉伸示例

下面的元素根据鼠标所在的位置在两种确定的状态之间交替。如果悬停在元素上,则过渡被触发,因此元素变得更高但更窄,看起来伸展开来。

CSS过渡:当用户将鼠标悬停在元素上时,元素展开

空格键反例

在下面的例子中,由于CSS和JavaScript的结合,用户点击空格键的次数被“记录”了下来。当用户点击重启按钮时,该数字将返回到0。

CSS过渡示例:空格键计数器

图片来源

按钮的例子

当鼠标悬停在下面的元素上时,箭头变成了一个矩形,因此文本“Let’s go!”看起来像一个按钮。

CSS过渡示例:按钮悬停

图片来源

CSS转换失败

如果你已经创建了一个过渡,但它没有按照预期工作,你可以寻找一些快速修复。

1.转换属性设置为none。

如上所述,transition-property属性指定了转换应用到的CSS属性的名称。这个属性可以通过关键字“all”定义,该关键字表示所有属性都要转换,也可以通过要转换的属性列表来定义。但是,如果属性被设置为“none”,那么没有属性将转换。

2.未定义转换持续时间,或将其设置为零或负值。

如上所述,transition-duration属性指定转换所花费的时间长度。它可以设置为任何正值。如果未定义属性,则该值将被视为零秒。元素仍然会从一种状态变化到另一种状态,但这种变化是即时的——不会发生动画。

负值表示声明无效,因此会假定该属性没有定义。

为了理解这个效果,请比较下面两种转换效果。

看到这支笔作者:Christina Perricone (@hubspot)CodePen

什么时候使用过渡和动画

让我们回顾一下在动画上使用过渡的理想用例:

  • 创建简单的从到动作
  • 只有当用户通过鼠标悬停或单击元素与元素交互时才会产生效果
  • 使用JavaScript
  • 当用户将鼠标悬停在按钮上时,设计可以改变按钮颜色或大小的按钮

CSS动画

动画更复杂,但也会给你更多的灵活性-更灵活,更多的部分涉及。使用CSS动画,您可以设置不同的阶段,在元素持续时间内多次改变元素的行为。这让你可以更多地控制动画中的属性值。

为此,您需要定义一组关键帧。关键帧表示动画的开始和结束,以及开始和结束之间的任何中间步骤。换句话说,每个关键帧都描述了动画元素在动画序列中的给定时间应该如何渲染。你可以设置任意多的关键帧(但你至少需要两个)。

有了这些功能,你就可以创造出HTML5动画,与Flash等高级工具所创造的动画相媲美。

动画还可以让你在每个关键帧中指定属性值,而不必声明它们。一旦到达正确的关键帧,元素就会平滑地改变行为,即使属性在开始时没有列出。

CSS动画属性

要创建转换,您可以使用简写的animation属性,或者下面的子属性的组合。

只需要animation-name和animation-duration属性。如果没有指定其他属性,那么它们将被设置为默认值。

  • animation-name:指定动画的类型,是必需的。
  • 动画:指定动画序列的时间长度。
  • animation-timing-function:设定动画的节奏。
  • animation-delay:指定动画开始的时间。可以使用毫秒或秒,正数或负数。
  • 动画方向:定义动画的方向。
  • animation-fill-mode:指定动画样式是在动画播放之前还是之后应用。
  • animation-iteration-count:指定动画播放的次数。
  • animation-play-state:用于暂停和恢复动画序列。

循环CSS动画

与只在被触发后播放一次的过渡动画不同,CSS动画不需要触发动作,可以设置为循环。你可以想重复多少次就重复多少次,也可以让它永远持续下去。您可以使用animation-iteration-count属性,该属性允许您以秒数或无限

有一个不那么直接的方法来实现CSS过渡循环transitionEnd事件。然而,如果你喜欢添加一个循环,CSS动画会更容易。

CSS动画的例子

下面是一个CSS动画的例子。图像会经过多种状态并循环。蒸汽体积缩小,上升,然后消失。这个图像比CSS转换更加动态。

蒸汽咖啡杯的CSS动画

何时使用动画vs过渡

让我们回顾一下在过渡中使用动画的理想用例:

  • 创造更复杂的动作系列
  • 在页面加载时立即产生效果
  • 只使用CSS(不使用JavaScript)
  • 为UI设计指令覆盖层

决定过渡和动画

CSS过渡和动画有许多相似之处。然而,很明显,它们也有显著的差异,这应该指导你如何在你的网站上使用它们,以提高你的营销努力。无论你决定,添加过渡或动画效果到你的网站可以吸引和取悦你的访问者,并保持他们回来。

编者按:本文最初发表于2020年3月,为全面起见已进行更新。

新的文字-动作

css的介绍

最初发布于2021年9月10日上午7:00:00,更新于2021年9月10日

主题:

CSS动画