CSS动画简介
你想用 CSS 制作动画吗?太好了,让我们开始吧😄!
大多数属性都可以进行动画处理:,,,,width
等。在本教程中color
,我们将重点介绍。opacity
transform
transform
使用 CSStransform
我们可以旋转、缩放、倾斜或平移 html 元素。
尝试将鼠标悬停在忍者图像上(如果使用移动设备,则单击):
尚无动画。代码如下:
<img class="ninja1" src="https://ljc-dev.github.io/fluffy-octo-adventure/nin.png">
<img class="ninja2" src="https://ljc-dev.github.io/fluffy-octo-adventure/nin.png">
<img class="ninja3" src="https://ljc-dev.github.io/fluffy-octo-adventure/nin.png">
img {
display: block;
width: 200px;
height: 200px;
object-fit: contain;
}
.ninja1:hover {
transform: translateY(50px);
}
.ninja2:hover {
transform: scale(1.5);
}
.ninja3:hover {
transform: rotate(45deg);
}
悬停时:
-
translateY(50px)
将ninja1向下移动50px。 -
scale(1.5)
使ninja2增大 1.5 倍。 -
rotate(45deg)
将ninja3顺时针旋转45 度。
过渡
现在让我们看看如何使用CSS 过渡来为这些变换添加动画。
过渡可使一个或多个属性的变化动起来。
我们添加一个 2s 的转换,transform
如下所示:
.ninja1, .ninja2, .ninja3 {
transition-property: transform;
transition-duration: 2s;
}
-
transition-property
接受要添加过渡的属性的名称。我们可以使用关键字添加多个属性all
,或者用逗号分隔每个属性,例如transition-property: transform, opacity
-
transition-duration
设置过渡的持续时间。
我们也可以使用简写transition
:
.ninja1, .ninja2, .ninja3 {
transition: transform 2s;
}
这段代码和上面的代码是一样的。
我们在悬停时获得动画:
我们可以用 来改变过渡的感觉transition-timing-function
。

默认为ease
。我们来试试ease-in-out
。
最后添加 1 秒延迟transition-delay
。
.ninja1, .ninja2, .ninja3 {
transition-property: transform;
transition-duration: 2s;
transition-timing-function: ease-in-out;
transition-delay: 1s;
}
或者
.ninja1, .ninja2, .ninja3 {
transition: transform 2s ease-in-out 1s;
}
如果您再次将鼠标悬停在忍者图像上,您会注意到动画以 1 秒的延迟开始。
@keyframes动画
在 CSS 中实现动画的另一种方法是使用animation
和@keyframes
规则。
@keyframes
规则定义动画中的步骤:
@keyframes moveDown {
0% {
transform: translateY(0);
}
100% {
transform: translateY(50px);
}
}
有些人喜欢用关键字“equivalent from
and ”来代替“0%”和“100%” to
。
您可以根据需要添加从 0 到 100% 的任意数量的关键帧,并根据需要设置任意数量的属性动画。
这个奇怪的动画绝对有效👍。
@keyframes weirdAnim {
0% { transform: translateY(0); }
11% {
width: 50px;
background-color: green;
transform: rotate(90deg);
}
50% { height: 100px;}
66% { transform: rotate(-720deg); }
99% {
border-radius: 200px;
background-color: black;
}
100% {
background-color: red;
}
}
要运行它,我们需要引用它的名称animation-name
:
.ninja1{
animation-name: weirdAnim;
}
并给它一个持续时间animation-duration
:
.ninja1{
animation-name: weirdAnim;
animation-duration: 5s;
}
简写为animation
:
.ninja1{
animation: weirdAnim 5s;
}
我们得到了这个怪物:
(单击“重新运行”可再次播放动画)
与过渡相同,我们可以使用 改变动画的感觉animation-timing-function
。并使用 添加延迟animation-delay
。
.ninja1{
animation-name: weirdAnim;
animation-duration: 5s;
animation-timing-function: ease;
animation-delay: 1s;
}
或者:
.ninja1{
animation: weirdAnim 5s ease 1s;
}
使用关键帧动画,我们还可以决定动画的运行次数animation-iteration-count
。默认为1
。设置为 则infinite
动画无限运行。
我用它来制作infinite
封面动画。以下是我的文本动画代码:
还有两个更高级的动画属性:
-
animation-direction
:normal
(默认)从第一个关键帧开始。reverse
从最后一个关键帧开始。alternate
从第一个开始到最后一个,但如果动画重复,下一个动画将从最后一个到第一个。alternate-reverse
与替代相同,只是它从最后一个关键帧开始。(示例)
-
animation-fill-mode
forwards
。当我们想要在动画播放完毕后保留动画状态时,就设置它。
我们将把 kpop girl 图像向下滑动三次,并用 保持最后的位置forwards
。
<img class="kpop" src="https://ljc-dev.github.io/fluffy-octo-adventure/kpop.png">
img {
display: block;
width: 200px;
height: 200px;
object-fit: contain;
}
@keyframes slideDown {
0% {
transform: translateY(0%);
}
100% {
transform: translateY(75%);
}
}
.kpop{
animation-name: slideDown;
animation-duration: 3s;
animation-iteration-count: 3;
animation-direction: alternate;
animation-fill-mode: forwards;
}
或者:
.kpop{
animation: slideDown 3s 3 alternate forwards;
}
注意如何alternate
使用 来改变第二次迭代的方向。因此,动画不是跳起来再滑下来,而是反向运行并向上滑动。
这就是过渡和关键帧动画的介绍的结尾。
使用简写时要注意的一点是不要混淆属性的顺序。你可以省略那些不需要更改的属性,但不要把持续时间放在动画名称前面。
以下是过渡和动画的正确属性顺序:
transition: property duration timing-function delay;
animation: name duration timing-function delay iteration-count direction fill-mode;
谢谢阅读!
我希望您现在对如何使用 CSS 制作动画有了更好的了解。
下面我发布了一些常见的 CSS 动画,其中一些是用 JS 实现的。如果您有任何疑问,请留言或在社交媒体上联系我👌。
编码愉快👋!
-
按钮悬停时过渡不透明度和活动时缩放
-
旋转器
-
进度条动画
-
菜单链接悬停在底线上
-
使用淡入淡出的动画滚动到顶部
-
汉堡下拉菜单
-
汉堡滑动右侧菜单+叠加
-
为那些好奇我是如何做到的的人发布封面(没有回应)