Web 设计师经常寻找能够使静态元素栩栩如生的工具,而 CSS 关键帧是完成此任务的绝佳方法。关键帧使我们能够在一定时间内对元素进行动画处理,为我们的设计提供动态的感觉。下面,我们将介绍使用关键帧的基础知识,从定义动画到将它们应用到我们的元素。
了解 CSS 关键帧的结构
每个 CSS 动画的核心都是关键帧,它定义动画序列的各个阶段。关键帧是使用@keyframes
规则声明的,后跟您选择的动画名称。我们在下面的示例中使用的名称changeBackground
是任意的 – 您可以将其命名为适合您需要的任何名称。
这是一个例子:
/* Keyframe declaration */
@keyframes changeBackground {
0% { background: #ff0000; } /* Red at the start */
50% { background: #00ff00; } /* Green in the middle */
100% { background: #0000ff; } /* Blue at the end */
}
关键帧changeBackground
指示元素的背景颜色在动画过程中如何过渡。在动画开始时 (0%),背景为红色。在中间点 (50%),背景变为绿色。最后,在动画结束时(100%),背景转变为蓝色。
将 CSS 关键帧应用于元素
现在,让我们使用animation
简写属性将关键帧应用到 HTML 元素:
/* Applying keyframe to an element */
.myElement {
animation: changeBackground 2s ease-in-out 1s infinite alternate;
}
在本例中,我们已将changeBackground
关键帧应用于具有该类的元素.myElement
。动画根据我们在关键帧中设置的阶段,在定义的时间段内改变该元素的背景颜色。
剖析动画速记
简写animation
属性封装了几个与动画相关的属性:
/* The animation shorthand */
animation
: changeBackground
2
s ease-in-out
1
s
infinite
alternate;
changeBackground
:我们之前定义的关键帧。2s
:动画周期持续 2 秒。ease-in-out
:动画的节奏,开始缓慢,中间变快,然后缓慢结束。1s
:动画将在延迟 1 秒后开始。infinite
:动画将无限重复。alternate
:动画将在每个周期交替方向。
这些是最常用的属性,但请记住,您还可以指定animation-fill-mode
、animation-play-state
等。如果您想要对动画进行更多控制,也可以单独指定每个属性。
使用百分比和关键字操作动画时间轴
from
关键帧动画允许使用百分比或和关键字来决定样式的变化to
。from
代表动画的开始 (0%),to
代表动画的结束 (100%):
/* Keyframe declaration using keywords */
@keyframes fadeInOut {
from { opacity: 0; } /* The element is fully transparent at the start */
to { opacity: 1; } /* The element is fully visible at the end */
}
.myElement {
animation: fadeInOut 3s ease-in-out 1s infinite alternate;
}
在fadeInOut
上面的关键帧中,我们正在更改元素的不透明度。它从完全透明 ( ) 开始opacity: 0
,然后过渡到完全可见 ( opacity: 1
)。和关键字可以分别与 0% 和 100% 互换from
使用to
。
因此,当将此动画应用于 时.myElement
,该元素将在 3 秒的时间内逐渐淡入,从完全透明到完全可见。1 秒延迟后,该过程将反转,导致元素淡出,由于 和infinite
关键字而形成持续的淡入和淡出循环alternate
。
将一切整合在一起
让我们看一个稍微更详细的例子:
/* Keyframe declaration */
@keyframes spin {
0% { transform: rotate(0deg); } /* Element starts at its original position */
50% { transform: rotate(180deg); } /* Rotates 180 degrees halfway through the animation */
100% { transform: rotate(360deg); } /* Completes a full rotation at the end */
}
.box {
width: 100px;
height: 100px;
background: #FF4B59; /* Specific shade of red */
animation: spin 2s linear infinite; /* Applies the spin animation */
}
这是我们的 HTML 元素:
<div class="box"></div>
在上面的示例中,我们定义了一个名为spin
旋转元素的动画。我们将此动画应用于<div>
具有 class 的元素.box
。这<div>
是一个具有特定红色阴影的正方形。它将继续旋转,由于infinite
关键字而创建一个循环。transform
带有函数的属性用于rotate()
改变元素的位置,提供旋转效果。该linear
关键字确保整个动画中旋转速度保持一致。
结论
CSS 关键帧构成了大多数 CSS 动画的基础。当然,除了我们所涵盖的方面之外,还有更多需要学习和实验的内容。例如,考虑探索steps()
CSS 动画中的功能,它允许您将动画分成多个片段,从而为您提供“逐帧”控制。
当涉及交互式动画时,JavaScript 可以与 CSS 关键帧结合使用,以根据单击或滚动等用户操作触发动画。同时,SVG 动画提供了超出标准 HTML 元素的更复杂的图形动画,允许您对 SVG 图像的各个部分进行动画处理,以获得复杂的视觉效果。
随着您对 CSS 关键帧的理解加深,您将能够更有效地利用它们来改进您的设计及其用户体验。考虑使用动画来进行用户指导、交互反馈,或者只是为了提升您的设计。
但是,请记住,动画可能会占用大量资源。努力在动画的美感和网站性能之间取得平衡。减少动画属性的数量或最小化关键帧的数量等技术可以帮助您实现这种平衡。