在上一篇文章中,我逐步创建了一个基本的 SVG。在本文中,我将继续我们上次停下的部分并探索 SVG 动画。
位图/光栅图形由单独的像素组成,而矢量图形则由单独的形状组成。
这使得矢量图形能够在不损失质量的情况下进行缩放,因为它们可以在任何分辨率下清晰地渲染。
然而,SVG 由单独的形状组成还有另一个好处。每种形状都可以按照我们的意愿设计。
由于 SVG 中的每个形状都可以设置样式,因此我们能够在 Web 上创建动画图形。
动画 SVG:一个基本示例
我将修改我们在上一篇文章中创建的 SVG。
目前,我们有以下标记来创建 SVG:
<svg
viewBox="0 0 400 400"
xmlns="[http://www.w3.org/2000/svg](http://www.w3.org/2000/svg)"
/>
<circle cx="50%" cy="50%" r=25% />
<circle cx="50%" cy="50%" r=10% />
</svg>
circle
我们在 CSS 中设置元素的样式:
svg {
height: 400px;
width: 400px;
}
circle {
&:first-child {
fill: #FDC56B;
stroke: #3E829B;
stroke-width: 20;
}
&:last-child {
fill: #D45F5B;
}
}
让我们尝试使用CSS 动画为这些圆圈添加动画效果。
首先,我们可以定义我们的keyframes
动画:
[@keyframes](http://twitter.com/keyframes) fade-in {
from {
fill-opacity: 0;
} to {
fill-opacity: 1;
}
}
每当指定此动画时,fill
都会从 的不透明度0
变为的 不透明度1
(我们可以省略to ,因为fill-opacity: 1
这是隐式默认值)。
让我们将此动画分配给外圆:
circle {
&:first-child {
fill: #FDC56B;
stroke: #3E829B;
stroke-width: 20;
animation: fade-in 2s ease-out infinite;
}
&:last-child {
fill: #D45F5B;
}
[@keyframes](http://twitter.com/keyframes) fade-in {
from {
fill-opacity: 0;
}
to {
fill-opacity: 1;
}
}
}
我们已经制作了动画fill
,但我们还可以为任何SVG 属性制作动画。
stroke-width
让我们尝试一下动画:
[@keyframes](http://twitter.com/keyframes) fade-in {
from {
fill-opacity: 0;
stroke-width: 0;
}
to {
fill-opacity: 1;
stroke-width: 20;
}
}
最后,我们可以将此动画应用到最内圈,时间略有不同:
circle {
&:first-child {
fill: #FDC56B;
stroke: #3E829B;
stroke-width: 20;
animation: fade-in 2s ease-out infinite;
}
&:last-child {
fill: #D45F5B;
animation: fade-in 2s ease-in infinite;
}
[@keyframes](http://twitter.com/keyframes) fade-in {
from {
fill-opacity: 0;
stroke-width: 0;
}
to {
fill-opacity: 1;
stroke-width: 20;
}
}
}
就是这样!您可以在此处查看最终笔。 🚀
实际应用
因此,我们已经使用 CSS 动画对 SVG 上的属性进行动画处理,以创建基本动画。
您可以使用更先进的动画原理和技术,使用 SVG 制作大量令人眼花缭乱的动画:
此外,您可能想知道如何在典型的业务 Web 应用程序中使用 SVG。
本着不重新发明轮子的精神,我将简单地将您链接到Sarah Drasner 撰写的这篇精彩文章,其中举例说明了一些可能用于 UX 设计的 SVG 动画。如果您想进一步掌握 SVG 动画,我强烈推荐 Drasner 的书《SVG 动画》。
感谢您的阅读、学习、讨论和分享😃