【发布时间】:2019-01-21 16:27:05
【问题描述】:
我想用 CSS 为网站徽标制作动画。我的徽标类似于:A B C。现在它是一个包含 3 条路径的 SVG,如下所示:
<div id="logo-wrapper">
<svg class="logo-svg" enable-background="new 0 0 100 20" version="1.1" viewBox="0 0 100 20" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<path class="logo-letter logo-a" d="..." fill="#26508C"/>
<path class="logo-letter logo-b" d="..." fill="#26508C"/>
<path class="logo-letter logo-c" d="..." fill="#26508C"/>
</svg>
</div>
“A”应该留在原地,“B”和“C”应该向左移动,在最后的“A”前面完成。 IE。这 3 条路径以一个单词开头,它们应该在相同的位置(“A”所在的位置)结束。
我尝试了什么:
.logo-b,
.logo-c {
animation: go-left 2s ease infinite;
}
@keyframes go-left {
100% { transform: translate(0%, 0%); }
}
我开始尝试使用translate(-100px,0px)(SVG 应该是 100px 宽),但从逻辑上讲,这会将其他 100px 旁边的所有字母移到左侧。
任何帮助将不胜感激。谢谢!
编辑:我想我可以分别为每条路径设置动画,类似于“B”的translate(-50px,0px) 和“C”的translate(-80px,0px)。但实际上在我的实际项目中,大约有 15 条路径,我想有一个更好(更少代码)的解决方案。
【问题讨论】:
-
我会推荐一个像 snap.svg snapsvg.io/docs/#Element.animate 这样的 JavaScript 库来管理你的动画。它将允许您指定实际的
X和Y坐标,即您希望路径结束的位置(在动画结束时)。 -
另一种选择是让所有对象从其终点的固有位置开始,然后使用
transform: translate()属性手动置换每个对象。那么如果你的@keyframe动画是{ transform: translate(0%, 0%); }他们都会回到他们的初始位置。
标签: css svg css-animations translate-animation