当前位置: 首页 > Web前端 > HTML

CSS实现两个球相交的粘性效果

时间:2023-04-02 16:14:48 HTML

这是纯CSS做出来的效果。说白了,这个效果就是图像处理的一个原理。方法和Photoshop中几乎一模一样,只是一层,一个用彩板做,另一个用CSS做(把div当成层就行了)。从PhotoShop开始,我们一开始就玩玩Photoshop,会比直接写CSS更容易理解(没有Photoshop也没关系,看了说明就明白了),首先,我们添加两个新层,在一个小球里面放一个红色的,在另一个里面放一个黑色的大球。然后我们使用高斯模糊滤镜分别对小红球和大黑球进行模糊处理。接下来,我们添加一个“亮度和对比度”调整图层,勾选使用旧版本,然后拉高对比度值,你就会看到神奇的现象。边缘不再模糊后,你可以尝试用鼠标移动红球,你会发现红球和黑球的交点变成了粘性效果心。这就是我们要做的效果!这样,你就已经知道如何使用Photoshop来制作了。同样,CSS也是用同样的方法,只是把layer改成div,就这么简单。CSS效果首先,我把HTML中类redball的div作为红球,类blackball的div作为黑球。这是刚才PhotoShop里的两个图层,然后在最外边放一个class。效果的div,这是我们的调整层,完成后的HTML代码应该是这样的:

只要给blackball和redball加上blurfilter,效果加上contrastfilter,就可以实现Photoshop中的特效,blurfilter必须使用filter:blur(value),contrast然后使用filter:contrast(value)。CSS看起来像这样:.effect{width:100%;高度:100%;填充顶部:50px;过滤器:对比度(10);背景:#fff;}.blackball{宽度:100px;高度:100px;背景:黑色;填充:10px;边界半径:50%;保证金:0自动;z-索引:1;过滤器:模糊(5px);}.redball{宽度:60px;高度:60px;背景:#f00;填充:10px;边界半径:50%;位置:绝对;顶部:70px;左:50px;z-索引:2;过滤器:模糊(5px);动画:rball6s无限;里面blur的值设置为5px,contrast的值设置为10,可以看到红黑球粘在一起了。至于如何让他们动起来?需要用到CSS3动画,动画程序如下:@keyframesrball{0%,100%{left:35px;宽度:60px;高度:60px;}4%,54%{宽度:60px;高度:60px;}10%,60%{宽度:50px;高度:70px;}20%,70%{宽度:60px;高度:60px;}34%,90%{宽度:70px;高度:50px;60px;高度:60px;}50%{左:计算(100%-95px);宽度:60px;高度:60px;}}这里的关键帧写了很多,因为当红球进入黑球时,水平方向会被压缩,离开黑球时,水平方向方向会拉长,这样摸起来会比较黏。为了测试这个效果,费了我不少心血!(不过这里有一点要注意,因为位置会自动计算,所以如果要测试,记得把最外层效果的宽度设置为320px)完成红球后,把两个蓝球放在一起再Separation也是一样的道理。下面列出了两个蓝色球的CSS。比较需要注意的是,蓝球合并后会变大,分开时也会被拉伸。.blueball1{宽度:80px;高度:80px;背景:#00f;填充:10px;边界半径:50%;位置:绝对;顶部:230px;左:0;z-索引:2;过滤器:模糊(8px);动画:bball16s无限;}.blueball2{宽度:80px;高度:80px;背景:#00f;填充:10px;边界半径:50%;位置:绝对;顶部:230px;左:240px;z-索引:2;过滤器:模糊(8px);animation:bball26sinfinite;}@keyframesbball1{0%,100%{left:0;顶部:230px;宽度:80px;高度:80px;}20%{顶部:230像素;宽度:80px;高度:80px;}85%{顶部:230像素;左:75px;宽度:90px;高度:70px;}90%{顶部:228px;宽度:75px;高度:85px;}50%{顶部:215像素;左:110px;宽度:110px;高度:110px;}}@keyframesbball2{0%,100%{left:240px;顶部:230px;宽度:80px;高度:80px;}20%{顶部:230像素;宽度:80px;高度:80px;}85%{顶部:230像素;左:165px;宽度:90px;高度:70px;}90%{顶部:228px;宽度:75px;高度:85px;}50%{左:110px;顶部:215px;宽度:110px;高度:110px;不知道这个效果可以用在什么地方,但是如果用在海底世界或者一些加载特效上,应该是相当不错的!获取粘球的完整动画代码: