前言
前面介绍了那么多朴素无常的特效,这次带来一个炫酷的望花筒特效。望花筒特效是一种基于 CSS3
的特效,可以用来实现网页的动态背景效果。它是通过旋转、缩放、透明度等属性,将一组图片或内容按照一定的角度和速度旋转展示,形成一种类似望远镜或望花筒的效果。
效果预览
望花筒效果如下所示。
HTML实现
我们首先需要定义了一个圆形容器,然后在里面嵌套了 5 个 span
元素。每个 span
元素都有一个 data-text
属性,其值为 "JueJin"
。这些 span
元素实际上并没有显示任何内容,但可以通过 JavaScript
或 CSS
样式来控制它们的显示效果,这里我们会通过 CSS
样式将内容显示出来。
<div class="circle">
<span data-text="JueJin"></span>
......
</div>
CSS实现
介绍完了 HTML
部分,现在来说说 CSS
部分。前面提到过,CSS
部分这里运用到旋转,缩放等属性。我们首先为圆形容器添加样式吧,实现一个基本的圆形,相关代码如下。
.circle{
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);
width: 1400px;
height: 1400px;
border-radius: 50%;
}
然后我们在 span
中添加相关自定义动画。
.circle span{
......
animation: animate 5s cubic-bezier(.64, -0.56, .36, 1.56) infinite;
}
@keyframes animate {
0%{
transform: rotate(0deg);
}
80%,100%{
transform: rotate(360deg);
}
}
该动画表示的意思是,5s
表示动画执行时间为 5 秒,cubic-bezier(.64, -0.56, .36, 1.56)
表示动画执行的缓动函数,infinite
表示动画无限循环执行。具体来说,这个缓动函数会使得动画在开始时加速,然后在中间部分减速,最后再次加速,从而呈现一种生动的效果,具体效果可以参考码上掘金呈现出来的效果展示。
要想让每个圆形在视觉上以不同的速度旋转,还需要向 span
元素里添加 animation-delay
属性,该属性可以为动画设置延迟时间,相关代码如下。
.circle span:nth-child(1){
top: 0;
left: 0;
right: 0;
bottom: 0;
animation-delay: 0s;
}
.......
为每个 span
设置不同的延迟时间,这样就可以在不同的时间旋转,从而达到符合预期的效果。
最后,我们再通过伪元素 ::before
添加文本和伪元素 ::after
来添加阴影效果,使用 box-shadow
属性添加 4 个 inset
阴影,分别在不同的深度和透明度下模拟出一个深度感和立体感强烈的阴影效果,相关代码如下。
.circle span::before{
content: attr(data-text);
......
}
.circle span::after{
......
box-shadow: inset 0 0 50px rgba(0, 0, 0, 0.5),inset 0 0 75px rgba(0, 0, 0, 0.5),inset 0 0 100px rgba(0, 0, 0, 0.5),inset 0 0 125px rgba(0, 0, 0, 0.5);
}
这样望花筒特效就实现了。
总结
望花筒特效动态效果明显,更加炫酷,并且我们实现的这个效果代码简单易懂,容易实现和修改,可以通过调整旋转速度、角度、图片数量等参数,实现不同的效果。对于想在该特效上拓展的朋友们来说,它还可以与其他 CSS
特效、JavaScript
插件等组合使用,实现更复杂的效果。总之,望花筒特效是一种简单而实用的 CSS
特效。