本文正在参加「金石计划 . 瓜分6万现金大奖」
前言
时隔一个多月,又带着 css
来和大家见面了,这次又给大家带来一个炫酷的水波动画特效。话不多说,直接上效果:
实现思路
这次以掘金拼音为主题,在其内部实现一个水波荡漾效果,具有立体感。整个效果的实现思路很简单,并没有用到很多复杂的属性。看到这个水波效果,相信大家第一眼就能想到动画 @keyframe
吧。因此,这里面只需要大家掌握一些基本的动画知识即可。接下来就手把手教大家实现它。
html部分
Html
部分非常简单,只需设置一个基本的 div
盒子,然后放入自己想要的字体拼音即可,这里我放入掘金的拼音字母。相关代码如下:
<div class="container">
<h2>Juejin</h2>
<h2>Juejin</h2>
</div>
css部分
设计完 html
部分,接下来就来设计样式了。基本样式还是和之前一样,先来上一段必用的 css
代码:
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
body{
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background: #000;
}
这段代码将全局的样式设置好,相当于 rest
作用,另外它还可以实现水平居中的效果。每次我写 css
相关的代码时,它必不可少。
然后开始为 container
盒子以及文本设计基本样式了,这里是实现的关键部分。在这里首先给 container
盒子做一个相对定位,然后对文本做一个绝对定位,再通过 transform
来达到居中效果。现在关键部分来了,在文本中定义一个名为 animate
的动画,通过该动画来控制水波荡漾效果。相关代码如下:
.container{
position: relative;
}
.container h2{
position: absolute;
font-size: 8em;
transform: translate(-50%,-50%);
}
.container h2:nth-child(1){
color: transparent;
-webkit-text-stroke: 2px skyblue;
}
.container h2:nth-child(2){
color: skyblue;
animation: animate 4s ease-in-out infinite;
}
这里解释一下 animation
的属性。animate
是自定义的动画名称;4s
是动画的播放时间;ease-in-out
是指动画以低速开始,并以低速结束;infinite
表示动画无限次播放。
这是没有动画效果的展示图:
动画部分
这里将用到一个新属性:clip-path
。该属性使用裁剪方式创建元素的可显示区域,区域内的部分显示,区域外的隐藏。大家看到的参差不齐的水波就是通过该属性裁剪出来的,这里使用的是比较基础的方法,更详细的使用方法可以参考官方文档。
那么,该属性的值该如何控制呢,这里给大家介绍一个工具网站: CSS Clip-Path Generator - CSS Portal。通过这个工具就能很轻松地定义自己想要的裁剪属性值,并且使用起来十分简单。
自定义好裁剪值后,就可以将其放入定义好的 animate
动画中的 clip-path
属性。相关代码如下:
@keyframes animate {
0%,100%{
-webkit-clip-path: polygon(0 51%, 18% 72%, 46% 73%, 65% 60%, 82% 67%, 100% 46%, 99% 98%, 0% 99%);
clip-path: polygon(0 51%, 18% 72%, 46% 73%, 65% 60%, 82% 67%, 100% 46%, 99% 98%, 0% 99%);
}
50%{
-webkit-clip-path: polygon(0 55%, 16% 37%, 35% 53%, 60% 40%, 80% 57%, 100% 46%, 99% 98%, 0% 99%);
clip-path: polygon(0 55%, 16% 37%, 35% 53%, 60% 40%, 80% 57%, 100% 46%, 99% 98%, 0% 99%)
}
}
这是加上动画之后的展示图:
总结
整体看完之后是不是觉得很简单,但是又不失炫酷的效果。若对它感兴趣的朋友可以去试试,可以选择用别的拼音字母代替,或者换成其他更具风格的颜色。如果有更好的实现效果或者实现思路,可以在评论区告诉我ღ( ´・ᴗ・` )。