使用clip-path将 GIF 绘制成跳动的字母
前言
之前看到过一个有趣的CSS效果,今天我们也来实现一遍,将动图GIF通过clip-path绘制成一个个跳动的字母。
效果如下:

GIF随便找的,嗯?这不是重点,重点是下面的实现过程,别被GIF吸引了。
如果这篇文章有帮助到你,️关注+点赞️鼓励一下作者,文章公众号首发,关注 前端南玖 第一时间获取最新文章~
绘制字母
这是该效果的最重要部分,使用clip-path来绘制对应的字母。
MDN上对clip-path的定义如下:
使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。
我们先来绘制一个字母,以字母U为例,因为这个绘制过程也有一个过渡动画,所以我们需要绘制两条路径两条路径必须具有相同数量的点。

这就是字母U过度动画的开始与结束的路径。
它对应的clip-path代码如下:
.u {
clip-path: polygon(
0 0,
0 100%,
100% 100%,
100% 0,
84% 0,
61% 0,
41% 0,
19% 0
);
}
/* hover */
.container:hover .u {
clip-path: polygon(
0 6%,
5% 100%,
96% 88%,
98% 3%,
71% 5%,
71% 62%,
31% 68%,
25% 0
);
}
这个路径也不必担心不会写,可以直接通过工具clippy生成,非常方便,其它字母都可直接从这生成对应的绘制路径

现在我们就来实现这个字母的clip-path以及动画
<style>
body {
width: 100vw;
height: 100vh;
background: #000;
}
.container {
--duration: 700ms;
--ease: cubic-bezier(0.16, 1, 0.3, 1);
max-width: 400px;
display: flex;
justify-content: center;
flex-wrap: wrap;
margin: 10px auto;
}
.letter {
width: 80px;
height: 80px;
background: salmon;
transition: clip-path var(--duration) var(--ease);
}
.u {
clip-path: polygon(
0 0,
0 100%,
100% 100%,
100% 0,
84% 0,
61% 0,
41% 0,
19% 0
);
}
/* hover */
.container:hover .u {
clip-path: polygon(
0 6%,
5% 100%,
96% 88%,
98% 3%,
71% 5%,
71% 62%,
31% 68%,
25% 0
);
}
</style>
</head>
<body>
<div class="container">
<div class="letter u"></div>
</div>
</body>
来看看效果:

是不是有点感觉了,少了鹿晗差点感觉?别急着就给你加上。
添加背景
直接给这个div加上gif背景行不行?直接添加当然也可以,但想要给他加点合成虚化的效果,这里就可以使用mix-blend-mode来实现
MDN上对mix-blend-mode的定义如下
描述了元素的内容应该与元素的直系父元素的内容和元素的背景如何混合。
添加代码:
.letter::before {
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
user-select: none;
background-image: url("https://img.soogif.com/xiOE4Hs23bEoQVgN15NOtTUJ7cxFeExY.gif");
background-position: 50% 0%;
background-size: cover;
mix-blend-mode: soft-light;
}
效果如下:

添加摇晃的动画
这个就比较简单了
@keyframes letter {
25% { transform: translate(-5%, 5%) scale(1.05) rotate(-5deg) }
50% { transform: translate( 5%, -2%) rotate( 2deg) }
75% { transform: translate(10%, 0%) scale(1.02) rotate( 8deg) }
100% { transform: translate( 0%, -5%) rotate( 4deg) }
}
@keyframes dance {
100% { transform: scale(1.25) }
}
现在的效果如下:

添加变色
为了更好的看到效果,这里又添加了几个字母,并生成了对应的clip-path
.u {
clip-path: polygon(0 0, 0 100%, 100% 100%, 100% 0, 84% 0, 61% 0, 41% 0, 19% 0);
}
.container:hover .u {
clip-path: polygon(0 6%, 5% 100%, 96% 88%, 98% 3%, 71% 5%, 71% 62%, 31% 68%, 25% 0);
}
.a {
clip-path: polygon(0 0, 100% 0, 100% 100%, 0% 100%);
}
.container:hover .a {
clip-path: polygon(46% 2%, 57% 0, 100% 83%, 0% 100%);
}
.s {
clip-path: polygon(0% 0%, 51% 0, 100% 0, 100% 100%, 50% 100%, 0 100%);
}
.container:hover .s {
clip-path: polygon(100% 0, 60% 40%, 100% 70%, 0 100%, 40% 60%, 0 30%);
}
.d {
clip-path: polygon(0% 0%, 0% 100%, 25% 100%, 60% 60%, 60% 60%, 40% 40%, 40% 40%, 25% 100%, 100% 100%, 100% 0%);
}
.container:hover .d {
clip-path: polygon(6% 2%, 0 93%, 31% 100%, 27% 30%, 54% 34%, 61% 59%, 21% 72%, 31% 100%, 100% 74%, 76% 11%);
}
.p {
clip-path: polygon(0% 0%, 0% 100%, 25% 100%, 49% 56%, 49% 46%, 49% 47%, 19% 56%, 25% 100%, 100% 100%, 100% 0%);
}
.container:hover .p {
clip-path: polygon(5% 3%, 2% 100%, 33% 92%, 24% 18%, 71% 25%, 57% 46%, 25% 41%, 19% 66%, 90% 55%, 100% 0);
}
此时效果是这样的:

此时跟我们最终的效果就差一个变色了,变色其实也很简单,在关键帧中三种颜色之间不断进行转换,#a6e630 ,#f5e82f , 和#4cb8f5
.container:hover .letter {
animation: calc(var(--duration) * 2) calc(var(--i) * (var(--duration) / -3)) steps(3, end) alternate infinite;
animation-name: colors, letter;
}
.container:hover .letter::before {
animation: dance calc(var(--duration) * 2) calc(var(--i) * (var(--duration) / -3)) steps(3, end) infinite;
}
@keyframes colors {
0% { background-color: #a6e630 }
50% { background-color: #f5e82f }
100% { background-color: #4cb8f5 }
}
此时最终的效果就完成了~

使用clip-path将 GIF 绘制成跳动的字母的更多相关文章
- linux环境安装nagiosgraph将nagios的性能数据绘制成动态图表?
需求描述: 在安装完成nagios之后,比如有监控磁盘负载信息的,连接数的,进程数的,可以通过安装nagiosgraph软件, 将nagios的性能数据绘制成图表,可以看到一段时间内数据的变化 环境说 ...
- WPF GDI+字符串绘制成图片(二)
原文:WPF GDI+字符串绘制成图片(二) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...
- WPF GDI+字符串绘制成图片(一)
原文:WPF GDI+字符串绘制成图片(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/BYH371256/article/details/83 ...
- CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板。
CLIP PATH (MASK) GENERATOR是一款在线制作生成clip-path路径的工具,可以直接生成SVG代码以及配合Mask制作蒙板. CLIP PATH (MASK) GENERATO ...
- 使用android.graphics.Path类自绘制PopupWindow背景
PopupWindow简单介绍 PopupWindow是悬浮在当前activity上的一个容器,用它能够展示随意的内容. PopupWindow跟位置有关的API有以下几个: showAsDropDo ...
- SQL 汉字转换成拼音首字母 首字母查
-- ============================================= -- 功能:汉字转换成拼音首字母 首字母查 -- ========================== ...
- 微信小程序canvas把正方形图片绘制成圆形
wxml代码: <view class="result-page"> <canvas canvas-id='firstCanvas' style='width:1 ...
- GDI+ 如何将图片绘制成圆形的图片
大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码如下: private Image CutEllipse(Image img, Rectangle rec, Size size) { ...
- GDI+ 怎样将图片绘制成圆形的图片
大概意思就是不生成新的图片,而是将图片转换为圆形图片. 实现代码例如以下: private Image CutEllipse(Image img, Rectangle rec, Size size) ...
- asp.net GDI+把图片绘制成自定义的椭圆形状
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...
随机推荐
- Go语言实现基于TCP的内存缓存服务
接上文: https://www.cnblogs.com/N3ptune/p/16623738.html HTTP/REST的解析导致基于HTTP的内存缓存服务性能不佳,本次实现一个基于TCP的缓存服 ...
- 即时通讯系统为什么选择GaussDB(for Redis)?
摘要:如果你需要一款稳定可靠的高性能企业级KV数据库,不妨试试GaussDB(for Redis). 每当网络上爆出热点新闻,混迹于各个社交媒体的小伙伴们全都开启了讨论模式.一条消息的产生是如何在群聊 ...
- JVM调优笔记(一)--Nacos GC引发的服务批量下线问题
故障背景 线上批量发服务下线的告警邮件,偶发nacos连接超时.采用了spring boot admin(以下称sba)进行服务监控. 原因分析 因为sba服务是基于nacos对其它服务进行监控,所以 ...
- Django框架——可视化界面之数据增删改查、Django请求生命周期、Django路由层、反向解析
可视化界面之数据增删改查 针对数据对象主键字段的获取可以使用更加方便的 obj.pk获取 在模型类中定义双下str方法可以在数据对象被执行打印操作的时候方便的查看 ''' form表单中能够触发调剂动 ...
- API网关:开源Apinto网关-上游服务篇(二)
功能介绍 服务发现是一种分布式系统中的关键技术,它能够帮助应用程序动态地发现和访问依赖的服务实例,解决了服务实例分布在不同节点上的问题.通过服务发现,应用程序可以快速找到需要调用的服务实例的位置和元数 ...
- Godot 4.0 文件系统特性的总结
关于文件系统,官方文档犹抱琵琶半遮面,有一些很独特的特性并没有集中地摆出来,导致用的时候晕头转向. 这里总结了目前我发现的Godot文件系统的一些特性. 这是专门针对导出后的,因为一些操作在编辑器里面 ...
- 2022-12-29:nsq是go语言写的消息队列。请问k3s部署nsq,yaml如何写?
2022-12-29:nsq是go语言写的消息队列.请问k3s部署nsq,yaml如何写? 答案2022-12-29: yaml如下: apiVersion: apps/v1 kind: Deploy ...
- 2022-01-15:中心对称数 III。 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看)。 写一个函数来计算范围在 [low, high] 之间中心对称数的个
2022-01-15:中心对称数 III. 中心对称数是指一个数字在旋转了 180 度之后看起来依旧相同的数字(或者上下颠倒地看). 写一个函数来计算范围在 [low, high] 之间中心对称数的个 ...
- 为什么 GPU 更适用于时域算法,而 CPU 更适用于频域算法?
对于懂电脑的人来讲,他们可以简单地区分出电脑的GPU和CPU的应用范畴及其优势,而今天我们要讨论的问题是"为什么 GPU 更适用于时域算法,而 CPU 更适用于频域算法?"在讨论这 ...
- 运行和编译时期资源加载的不同【vue】
开发语言都有编译和运行两个阶段,很多时候这个也会带来许多bug 如:一个项目在开发阶段测试没有问题,然上线发布后就会有这样那样的问题,譬如说图片的加载,静态数据(js,css,json)读取错误 一 ...