使用SVG和CSS制作动画文本效果
最近,我在帮助朋友Jez制作他的新闻通讯网站Dept. of Enthusiasm时,产生了一个想法:如果我们让标题中的“enthusiasm”这个词稍微动起来会怎样?例如,如果单词中的每个字母都充满活力地上下跳动?
效果如下:
很酷吧?我知道我们可以使用SVG来创建文本,然后用CSS来制作动画。每个字母都是一个带有自己类名的路径,这使得选择每个字母成为可能。也就是说,没有什么能阻止我们使用HTML和CSS来实现这一点。使用SVG只是当时我觉得合适的一种方法。
首先,我们打开Figma,将文本输入到单独的文本框中。这样做是为了当我们点击这里的“Outline stroke”(轮廓描边)菜单项时……
……我们可以得到每个字母的单独矢量。这将有助于我们在导出SVG时为每个元素添加正确的CSS类。一旦我们描绘了每个字母的描边,我们就可以编辑矢量中的点(但对于我们即将要做的事情,我们不需要这样做):
如果我们将所有文本放在一个框中并点击“Outline Stroke”,那么它将创建一个包含所有这些字母的单个矢量。然后,它将创建一个包含坐标的单个路径,这对我来说很难进行样式设置,甚至很难理解那里到底发生了什么。
接下来,我把所有这些字母放在一个框架中(Sketch称之为画板),并将每个单词放入一个组中。这样,当它们被导出为SVG时,每个单词都将位于它自己的g
标签中,这也有助于我们设置字母的样式:
然后,我导出了SVG——但是!——我必须确保在导出时包含id选项。
如果我们不这样做,我们将得到每个字母的一堆路径元素,但它们将没有id属性。
导出后,我们得到以下结果:
我不确定有多少奇怪之处是我的问题,有多少是Figma的SVG导出问题,但我删除了<rect></rect>
元素,因为它是不必要的。然后,我为body元素设置了一个背景,这样我就可以看到文本并删除SVG本身的内联高度和宽度属性:<rect></rect>
太棒了!现在我们可以进入有趣的部分:为单词中的每个字母制作动画。
如果你查看上面示例的HTML,你会注意到有一个g
元素,它的id与Figma中的框架名称相同。每个单词也有g
元素,构成单词的每个路径都有一个单独的id。(这就是为什么正确命名我们的框架和组,以及在任何设计应用程序中保持良好的组织性非常重要的原因。)
令我惊讶的一件事是每个路径的导出顺序:它与我预期的顺序相反,“ENTHUSIASM”组中的第一个字母是M。所以我稍微清理了一下,确保每个字母都按正确的顺序排列。
为了使动画工作,我们首先将每个字母向下移动2像素:
g path { transform: translateY(2px); }
这是因为我希望每个字母都能跳动2像素,我们稍后会讲到这一点。我还注意到,通过此更改,我还需要更新SVG视口。否则,每个字母的底部将被切掉:
<svg fill="none" viewbox="0 0 146 13" xmlns="http://www.w3.org/2000/svg"></svg>
我可能应该只是在Figma中重新定位框架内的文本并再次导出它,但这对我需要的东西来说已经足够了。
现在我可以定位SVG中的第三个组(单词“enthusiasm”)并将animation-count
设置为无限:
/* targets the word "enthusiasm" */ g:nth-child(3) path { animation-name: wiggleWiggle; animation-duration: 2.5s; animation-iteration-count: infinite; }
上面的代码调用下面的wiggleWiggle
动画:
@keyframes wiggleWiggle { 20%, 100% { transform: translate(0, 2px); /* stay on the baseline for most of the animation duration */ } 0% { transform: translate(0, 0px); /* hop up */ } 10% { transform: translate(0, 2px); /* return to baseline */ } }
看到那个关键帧的开头——20%
, 100%
部分了吗?它的意思是“让所有文本在动画的大部分时间里都保持在基线上”。这就是给我们每个反弹之间带来很好延迟的原因:
我从Geoff关于动画时间的这篇非常好的文章中学到了这个技巧,如果您即将开始学习CSS动画,我强烈建议您查看一下。
现在是有趣的部分:使用animation-delay
属性,我们可以使每个字母在之前的字母之后跳动。我肯定有更聪明的方法可以做到这一点,但我只是使用了每个字母的id,如下所示:
#E { animation-delay: 0s; } #N { animation-delay: 0.1s; } #T { animation-delay: 0.15s; } #H { animation-delay: 0.2s; } #U { animation-delay: 0.25s; } #S_2 { animation-delay: 0.3s; } #I { animation-delay: 0.35s; } #A { animation-delay: 0.4s; } #S { animation-delay: 0.45s; } #M { animation-delay: 0.5s; }
它确实很凌乱,但是编写循环并不会节省我很多时间,而且将来也不需要更新它,所以我认为它已经足够好了。就这样,我们差不多完成了!
现在我们有一个弹跳的、充满活力的标题来问好。为跳动的文字欢呼!
以上是如何使用SVG和CSS来动画文本的详细内容。更多信息请关注PHP中文网其他相关文章!

具有CSS的自定义光标很棒,但是我们可以将JavaScript提升到一个新的水平。使用JavaScript,我们可以在光标状态之间过渡,将动态文本放置在光标中,应用复杂的动画并应用过滤器。

互动CSS动画和元素相互启动的元素在2025年似乎更合理。虽然不需要在CSS中实施乒乓球,但CSS的灵活性和力量的增加,可以怀疑Lee&Aver Lee&Aver Lee有一天将是一场

有关利用CSS背景滤波器属性来样式用户界面的提示和技巧。您将学习如何在多个元素之间进行背景过滤器,并将它们与其他CSS图形效果集成在一起以创建精心设计的设计。

好吧,事实证明,SVG的内置动画功能从未按计划进行弃用。当然,CSS和JavaScript具有承载负载的能力,但是很高兴知道Smil并没有像以前那样死在水中

是的,让#039;跳上文字包装:Safari Technology Preview In Pretty Landing!但是请注意,它与在铬浏览器中的工作方式不同。

此CSS-tricks更新了,重点介绍了年鉴,最近的播客出现,新的CSS计数器指南以及增加了几位新作者,这些新作者贡献了有价值的内容。

在大多数情况下,人们展示了@Apply的@Apply功能,其中包括Tailwind的单个property实用程序之一(会改变单个CSS声明)。当以这种方式展示时,@Apply听起来似乎很有希望。如此明显


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

DVWA
Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)