发布于 2026-01-06 1 阅读
0

2020 年 DEV 全球展示挑战赛(由 Mux 呈现):展示你的项目!

2020 年的简单 CSS 过渡

由 Mux 赞助的 DEV 全球展示挑战赛:展示你的项目!

CSS 过渡效果可以为我们的 Web 应用程序注入活力,从流畅的下滑效果到元素淡出,如果没有这些效果,我们的应用程序会显得非常静态和乏味。

然而,尽管CSS过渡效果非常重要且备受支持,但人们对它的理解仍然存在严重偏差,许多开发者(包括我以前)都会犯直接复制粘贴自己不理解的代码的错误。这会导致代码难以维护,过渡效果也无法正常工作。

本文将通过提供一份简明指南来纠正这一问题,该指南将介绍如何使用 CSS 过渡来改进您的 Web 应用程序。

CSS 过渡

创建 CSS 过渡效果的代码非常简单:
transition:

height .25s ease-in

这种过渡句的写法是简写,你也可以这样写:

transition-property: height,
transition-duration: 0.25,
transition-timing-function: ease-in

我觉得这种写过渡句的方式会增加很多冗余,而且实际上使事情变得复杂。

这段代码的意思是,当高度发生变化时,我希望以 250 毫秒的速度过渡,而 ease-in 则表示我希望它缓慢开始。

我发现,只需查看以下代码即可轻松编写过渡动画,该代码清晰地说明了过渡属性的顺序:

transition: <property> <duration> <timing-function> <delay>

其中最容易被误解的部分是“缓入”,这并不奇怪,因为“缓入”的属性名称是“transition-timing-function”,说实话,这并没有让它变得更容易理解。

然而,这可以用很简单的方式解释:
Easing describes an animation's rate of change over time

就是这么简单!

我的变性过程应该开始得快一些?
还是开始得慢一些?
或者开始得慢,最后快一些?

以下是您可以传递给转换定时函数的值:

transition-timing-function: linear;
transition-timing-function: ease;
transition-timing-function: ease-in;
transition-timing-function: ease-out;
transition-timing-function: ease-in-out;

顺便提一下,你也可以使用cubic-bezier(n,n,n,n)我们将在示例中使用的方法。

我认为理论部分就到此为止吧,信不信由你,即使只有这些核心知识,你也已经走在理解过渡的道路上了。

学习 CSS 过渡效果的最佳方法是看示例。
我创建了一个非常简单的CodePen 示例,展示了我们这里讨论的所有内容。

正如你在 CodePen 中看到的,它非常简单,展示了一个球棒推动球的动作。(看起来可能不太对劲,但如果你点击“在 CodePen 上编辑”,就可以看到它的完整效果。)

那么,让我们逐一了解实现这一目标的各个步骤:

1. 蝙蝠

所以有时候最好考虑的是起始位置和结束位置,而不是过渡过程。基本上,我们想要的是移动球棒一定的距离,使其能够击中球,实现这一目标的代码如下:

.baseballbat.move{
  transform: translateX(200px) rotate(50deg);
}

这段代码非常简单,当应用 move 类时,translateX(200px)它会将球棒200px向右移动(可以使用 JavaScript 添加类)。

忽略旋转功能,我只是用它来把球棒展平,因为从我得到的图片来看,球棒指向了角落。

所以下一步就是过渡到棒球棒。

以下代码可以实现此功能。

.baseballbat{
  height: 250px;
  width: 200px;
  transform: rotate(50deg);
  margin-left: 30px;
  transition: transform 350ms ease-in;
}

这里需要重点关注的是:

transition: transform 350ms ease-in;

这是非常基础的,我们对属性应用一个转换transform,它将接受350ms并具有一个transition-timing-function of ease-in

现在棒球棒的运动更加流畅了。

2. 球

现在,当棒球棒击中球时,我们需要移动球的位置。
和之前一样,我们首先关注球的最终位置,与棒球棒类似,我们添加一个 transform 属性:

.ball.move{
  transform: translateX(300px);  
}

当对球应用移动类时,它将300px向右移动。

到目前为止,一切都很好?

好的,和之前一样(可以看到一切都很相似),我们现在给球的 transform 属性添加一个过渡效果。
代码如下:

.ball{
  height: 100px;
  margin-left: 250px;
  top: -50px;
  transition: transform 550ms cubic-bezier(.02,.63,.79,1.33) 350ms;
}

好的,一切看起来都一样,我们对transform属性应用过渡效果,过渡效果会生效550ms,最后一个值是延迟,请注意,延迟与棒球棒的过渡长度相匹配,以确保球只有在球棒停止时才会移动。

所以这里有了一个新的数值:

cubic-bezier(.02,.63,.79,1.33)

三次贝塞尔曲线可以让我们实现更真实的过渡效果,你可以看到,使用三次贝塞尔曲线,球向前移动,然后向后移动,几乎就像球带有后旋一样。

三次贝塞尔曲线看起来可能很复杂,但其实不然。使用 cubic-bezier.com,您可以轻松创建炫酷的转场效果。只需在网站上稍作摸索,您就能完全掌握它,并轻松地将其复制粘贴到您的转场动画中。

概括

信不信由你,这就是使用转场效果所需的一切知识。转场效果如此简单,却仍然有很多开发者不理解,这真是令人难以置信。我希望通过这篇指南,能够让更多开发者学会学习如何使用工具,而不是简单地复制粘贴。

如有任何疑问/问题,请在下方留言。

感谢阅读。

文章来源:https://dev.to/paulryan7/simple-css-transitions-in-2019-3di4