强大的CSS:文字下波浪线动画效果

之前有至少5个人在评论中询问我文章中链接hover时候波浪下划线动画是怎么实现的,类似下图gif示意:

这里就介绍下是如何实现的。

有两种实现方法,各有优劣。

一、使用径向渐变纯CSS实现

就是使用径向渐变绘制我们的波浪线效果,一个波浪线循环段是有一个朝上的半个圆弧和一个朝下的半个圆弧组合而成的。

所以,我们只要使用径向渐变绘制圆弧,再通过background-position控制两个圆弧的位置,让其前后拼接在一起就可以实现波浪线效果。

相关CSS代码如下:

.flow-wave {
    background: radial-gradient(circle at 10px -7px, transparent 8px, currentColor 8px, currentColor 9px, transparent 9px) repeat-x,
        radial-gradient(circle at 10px 27px, transparent 8px, currentColor 8px, currentColor 9px, transparent 9px) repeat-x;
    background-size: 20px 20px;
    background-position: -10px calc(100% + 16px), 0 calc(100% - 4px);
}

实时效果如下:

有了静态的波浪线效果,剩下的就像这个波浪线动起来,用CSS3?animation动画控制background-position位置即可。

.flow-wave {
    animation: waveFlow 1s infinite linear;
}
@keyframes waveFlow {
    from { background-position-x: -10px, 0; }
    to { background-position-x: -30px, -20px; }
}

于是波浪线动画效果就实现了。

这种方法实现的优点是颜色控制非常方便,例如,我们修改文字颜色为原谅绿,弯弯水波的颜色也变成了原谅绿:

此方法实现的不足就是:理解成本有点高,如何使用CSS?radial-gradient模拟波浪线效果是需要相当的CSS功力积累的,上手不太容易,以后要修改个尺寸什么的也不太好维护。同时,在普通屏幕密度屏幕下的Chrome浏览器上,线条并不平滑,吹毛求疵的设计师不一定会接受。

此时,可以试试下面这种更利于理解的方法。

二、使用SVG波形矢量图作为背景

就是我们直接使用一个使用SVG波形矢量图作为背景,不用自己去手动CSS绘制,代码量差不多,还更容易理解。CSS代码示意:

.svg-wave {
    background: url("data:image/svg+xml,%3Csvg xmlns=‘http://www.w3.org/2000/svg‘ viewBox=‘0 0 20 4‘%3E%3Cpath fill=‘none‘ stroke=‘%23333‘ d=‘M0 3.5c5 0 5-3 10-3s5 3 10 3 5-3 10-3 5 3 10 3‘/%3E%3C/svg%3E") repeat-x 0 100%;
    background-size: 20px auto;
}

实时效果如下:

有了静态的波浪线效果,剩下的就像这个波浪线动起来,用CSS3?animation动画控制background-position位置即可。

.svg-wave {
    animation: waveMove 1s infinite linear;
}
@keyframes waveMove {
    from { background-position: 0 100%; }
    to   { background-position: -20px 100%; }
}

此方法就是我博客链接使用的方法。

优点是线条边缘平滑,效果细腻,易理解,易上手,易维护。

缺点也很明显,就是波浪线的颜色无法实时跟着文字的颜色发生变化,适用于文字颜色不会多变的场景。

如果我们想要改变波浪线的颜色也很简单,修改background代码中的stroke=‘%23333‘这部分,‘%23‘就是就是#,因此,stroke=‘%23333‘其实就是stroke=‘#333‘的意思。例如,我们需要改成红色略带橙色,可以stroke=‘%23F30‘,也可以写完整stroke=‘%23FF3300‘

这个颜色就是我博客链接波浪线的颜色,如下图:

大家可以根据自己实际开发的场景选择合适的方法。

三、每当要结束的时候

text-decoration属性早已支持波浪线下划线:

text-decoration-style: wavy;

效果如下截图:

可以看到,线好粗好不协调,而且字符和装饰线发生重叠的时候,装饰线直接消失了,结果波浪线变成了一截一截的,还需要使用text-decoration-skip进行额外控制。因此,实际开发,不建议在实际项目中使用。

而且你无法预知每个波浪线重复片段的宽度,想要无限运动理论上就不太可行。

因此,文字或者图形的波浪线动画效果不能使用text-decoration的波浪线。

自己是一个五年的前端工程师,希望本文对你有帮助!

这里推荐一下我的前端学习交流扣qun:731771211 ,里面都是学习前端的,如果你想制作酷炫的网页,想学习编程。自己整理了一份2019最全面前端学习资料,从最基础的HTML+CSS+JS【炫酷特效,游戏,插件封装,设计模式】到移动端HTML5的项目实战的学习资料都有整理,送给每一位前端小伙伴,每天分享技术

点击:加入

原文地址:https://blog.51cto.com/14284898/2398715

时间: 2024-08-08 01:16:35

强大的CSS:文字下波浪线动画效果的相关文章

使用强大的 CSS 滤镜实现安卓充电动画效果

用安卓手机的同学肯定不陌生,这个是安卓手机在充电的时候的效果.看到这个我就很好奇,使用 CSS 能做到吗? 经过一番尝试,发现使用 CSS 也是可以很好的模拟这种动画效果: 知识点 拆解一下知识点,最主要的其实是用到了 filter: contrast() 以及 filter: blur() 这两个滤镜,可以很好的实现这种融合效果. 单独将两个滤镜拿出来,它们的作用分别是: filter: blur(): 给图像设置高斯模糊效果. filter: contrast(): 调整图像的对比度. 但是

notepad++新建文档时,会出现语法错误的红色下波浪线

notepad++新建文档时,会出现语法错误的红色下波浪线: 原因:新建文档时默认设置语言为PHP. 解决方法:修改默认语言为java或JavaScript,如下: 小结:打开文档时,也可能出现下波浪线,可在此处修改语言: 原文地址:https://www.cnblogs.com/mediocreWorld/p/11014651.html

让TextView里面的文字逐个显示的动画效果实现

最近使用TextView时想要实现里面的文字逐个显示的动画效果,就如同打字一样. 主要实现思想:新建一个TextView的派生类,先将要逐个显示的字符串保存变量 mOriginalStr 中,然后启动新线程,每隔一段时间使用 Handler 类对象的sendEmptyMessage(int what) 方法发送消息,让 Handler 对象将mOriginal中的字符串逐个添加到TextView中进行显示. 代码实现如下: 1 /** 2 * Created by Haoye on 2016/1

网页设计中热门的css和js酷炫动画效果

最近在网站和博客上能发现使用各种各样很帮效果的动画效果.CodyHouse介绍了这些CSS和Javas cript的编码教程. 因为每个文件都可以整套下载,所以马上就可以使用. 固定背景效果 →效果页 适用的浏览器:Chrome,Safari,Firefox,Opera,IE9+ 在Section和div垂直配置的长页面中,把背景固定,像卷帘被提起似的滚动. 产品展示滑块 →效果页 适用的浏览器:Chrome,Safari,Firefox,Opera,IE9+ 把配置卡片状的各个产品,用很棒的动

如何实现系统自带下拉刷动画效果?

刚开始看确实感觉很不习惯,看久了,就觉得还不错!所以就想引用到自己的项目中: 接下来就找到源码看看他是如何运用的,首先找到SwipeRefreshLayout,因为这个类是Android自带的下拉刷新实现类,相应的动画也肯定在里面有用到. 可以找到里面用到了两个类MaterialProgressDrawable 和 CircleImageView,这两个类就是我们所看到的加载动画的实现类! 但是这两个类外界不可调用,为什么不可调用呢?打开源码 /** * * @hide */ class Cir

简单CSS技巧实现的Logo动画效果(很像导航栏上经常运用的效果,但有差别)

之前不少人提过说要实现像阿里百秀Logo那样的动画效果,为了满足广大用户的需求,这里就简单做个演示.东西相对较简单,所以不要认为你搞不定它. 下面是演示的案例代码 1 <style> 2 .imlogo{ 3 display:block; 4 width:160px; 5 height:80px; 6 background:#FF5E52 url(logo2.png) center 22px no-repeat; /* 写法一般是 先水平位置 ,然后垂直位置*/ 7 -webkit-trans

animate.css 一些常用的CSS3动画效果

大家已经开始在项目中使用一些CSS3动画效果了吧,这让网站在高端浏览器上看起来很上流.animate.css是一个老外做的各种CSS3动画的合集,比较全,也很炫,大家可以参考学习一下. 项目主页:http://daneden.me/animate/ 自定义下载样式:http://daneden.me/animate/build/ git地址:https://github.com/daneden/animate.css

Animate.css+js实现鼠标经过动画效果

动画效果可以参照animate.css 注:图片默认是不动的,当鼠标经过的时候才会动.原理很简单--通过js,添加鼠标经过事件,鼠标经过时,把当前元素存放在"data-in"里的"swing"添加到class里,前提animated这个类一定要加上,要不然动画不起作用. 1.引入animate.css <link href="https://cdn.bootcss.com/animate.css/3.5.1/animate.min.css"

纯html+css制作3D立方体和动画效果

今天放上来的,是一个用css3制作的立方体+动画,效果如下. 整个效果都只用了html和css,没有一句js,其实起初是使用了js来给六个面的小方格们赋值,后来强迫症犯了,直接手动写上吧,这样一句js都没有,更干脆利落点. 如下为body内整体结构,一个类名为big的盒子内,放置六个ul,每个ul赋予不同的类名,标明了ul面所在的位置,这六个ul会作为立方体的六个面. <div class="big"> <ul class="after">&