关注公众号 前端开发博客,回复“加群”

加入我们一起学习,天天进步

来源 | https://juejin.im/post/6844903843294085134

这是一个纯粹利用CSS所做出来的效果,这个效果说穿了就是一个图像处理的原理,做法跟Photoshop里头的几乎一模一样,只是一个用图层和色版来制作,一个则是用CSS(把div当成图层思考就好了)。

从PhotoShop开始

一开始我们来玩Photoshop,会比直接写CSS来得容易理解(没有Photoshop的人也没关系,看完说明也就懂了)。

首先我们新增两个图层,一个里头放上红色的小球,另外一个里头放上黑色的大球。

接着我们使用高斯模糊的滤镜,分别把小红球和大黑球模糊。

再来我们新增一个“亮度与对比”的调整图层,勾选使用旧版,然后把对比数值往上拉,你就会看到神奇的现象。

拉到边缘不再模糊之后,你就可以用鼠标尝试着把红球移动,就会发现红球与黑球交界的地方变成粘粘的效果心,这就是我们要做的效果!

就这样,你已经知道如何用Photoshop来制作,同理,CSS也是用同样的方法,只是把图层换成了div而已,就这么简单。

CSS效果

首先我在HTML里头,放上一个class为redball的div当作红球,class为blackball的是黑球,这就是刚刚在PhotoShop里头的两个图层,接着在最外围放上一个class为effect的div,这就是我们的调整图层,完成后HTML代码的长相应该是这样:

<div class="effect"><div class="blackball"></div><div class="redball"></div>
</div>

只要对blackball和redball加入模糊的滤镜,对effect加入对比的滤镜,就能够达到Photoshop里面的特效,而模糊的滤镜必须使用filter:blur(数值),对比则使用filter:contrast(数值)。

CSS代码如下:

.effect{width:100%;height:100%;padding-top:50px;filter:contrast(10);background:#fff;
}
.blackball{width:100px;height:100px;background:black;padding:10px;border-radius:50%;margin:0 auto;z-index:1;filter:blur(5px);
}
.redball{width:60px;height:60px;background:#f00;padding:10px;border-radius:50%;position:absolute;top:70px;left:50px;z-index:2;filter:blur(5px) ;animation:rball 6s infinite;
}

忽略CSS里头那些定位数值,里头blur的数值设为5px,contrast的数值设为10,就可以看到红球黑球粘在一起了,至于该怎么让他们动起来呢?就要使用CSS3的animation,animation的程序如下:

@keyframes rball{0%,100%{left:35px;width:60px;height:60px;}4%,54%{width:60px;height:60px;}10%,60%{width:50px;height:70px;}20%,70%{width:60px;height:60px;}34%,90%{width:70px;height:50px;}41%{width:60px;height:60px;}50%{left:calc(100% - 95px);width:60px;height:60px;}
}

这里的keyframe写了很多,因为要让红球进入黑球时,水平方向会被压缩一下,然后再离开黑球的时候,水平方向会被拉长,如此一来才会更像有粘性的感觉,为了测试这个效果,可真是煞费我的苦心呀!(不过这里有个要注意的地方,由于位置上会自动去计算,所以要测试的话,最外层的effect宽度记得设为320px)

完成红球之后,要让两颗蓝色球合在一起再分开,也是同样的原理,下方列出两颗蓝色球的CSS,比较需要注意的地方是我让蓝色球合体之后会变大一些,分开的时候也会拉长。

代码如下:

.blueball1{width:80px;height:80px;background:#00f;padding:10px;border-radius:50%;position:absolute;top:230px;left:0;z-index:2;filter:blur(8px) ;animation:bball1 6s infinite;
}
.blueball2{width:80px;height:80px;background:#00f;padding:10px;border-radius:50%;position:absolute;top:230px;left:240px;z-index:2;filter:blur(8px) ;animation:bball2 6s infinite;
}
@keyframes bball1{0%,100%{left:0;top:230px;width:80px;height:80px;}20%{top:230px;width:80px;height:80px;}85%{top:230px;left:75px;width:90px;height:70px;}90%{top:228px;width:75px;height:85px;}50%{top:215px;left:110px;width:110px;height:110px;}
}
@keyframes bball2{0%,100%{left:240px;top:230px;width:80px;height:80px;}20%{top:230px;width:80px;height:80px;}85%{top:230px;left:165px;width:90px;height:70px;}90%{top:228px;width:75px;height:85px;}50%{left:110px;top:215px;width:110px;height:110px;}
}

就这样,单纯利用CSS就完成了一个球粘粘的效果,坦白说我也不太清楚这个效果可以用在哪里,不过如果用在水底世界或一些loading的特效,应该是相当不赖的!

相关文章

  1. CSS垂直居中的七个方法

  2. 20个让你效率更高的CSS代码技巧

  3. 我写CSS的常用套路(附demo的效果实现与源码)

最后

转发文章并关注公众号:前端开发博客,回复 1024,领取前端进阶资料

  1. 回复「电子书」领取27本精选电子书

  2. 回复「加群」加入前端大神交流群,一起学习进步

  3. 回复「css」获取 CSS 精选文章

分享和在看就是最大的支持❤️

用CSS如何实现两个球相交的粘粘动画效果相关推荐

  1. html上下箭头动态效果,使用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果...

    有时侯页面很长,需要指示箭头告诉用户下面还有东西.可以用纯CSS的方法实现. HTML:添加一个链接,可修改锚点点击时滑动到指定位置,这里使用了Bootstrap 3.x版本的一个向下箭头作为图标. ...

  2. css盒心形的代码过程,如何使用CSS和D3实现用文字组成的心形动画效果(附代码)...

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现用文字组成的心形动画效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://gith ...

  3. css 让图标上下跳,使用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果

    有时侯页面很长,需要指示箭头告诉用户下面还有东西.可以用纯CSS的方法实现. HTML:添加一个链接,可修改锚点点击时滑动到指定位置,这里使用了Bootstrap 3.x版本的一个向下箭头作为图标. ...

  4. css两张图片怎么合在一起_web前端入门到实战:纯CSS实现两个球相交的粘粘效果...

    这是一个纯粹利用CSS所做出来的效果,这个效果说穿了就是一个图像处理的原理,做法跟Photoshop里头的几乎一模一样,只是一个用图层和色版来制作,一个则是用CSS(把div当成图层思考就好了). 从 ...

  5. html怎么做向下的图标,用CSS和Bootstrap图标制作上下跳动的指示箭头动画效果

    有时侯页面很长,需要指示箭头告诉用户下面还有东西.可以用纯CSS的方法实现. HTML:添加一个链接,可修改锚点点击时滑动到指定位置,这里使用了Bootstrap 3.x版本的一个向下箭头作为图标. ...

  6. Javascript第五章改变CSS样式节点两种方法,制作导航背景切换效果第十课

    第一种方法: 鼠标移出,移入来改变导航的样式 第二种方法: 如果改变的效果较多的话 代码出现冗余 可以有className 代码如下: 效果:

  7. 10个CSS和jQuery的加载中(loading)动画效果实现

    以往web开发中都使用Gif来实现加载中的效果,但是随着技术的发展我们也可以使用jQuery和CSS来实现加载中的效果,希望大家喜欢! 相关文章: 5个在线Ajax"加载中"旋转图 ...

  8. css 悬停动画_CSS3缩放图像动画效果悬停

    css 悬停动画 Today we will look into CSS3 Zoom Image animation effect with mouse on hover. With images b ...

  9. [京东实践干货]手把手教你实现「京喜工厂」的CSS动画效果

    0 契机与背景 今年Q1(2020年第一季度)参与了京喜事业部「京喜工厂」业务的前端开发.用户可以通过「京喜工厂」参与口罩.抽纸.大米等商品的"在线生产",既能趣味造物,又能免费领 ...

最新文章

  1. “AI”战疫在行动,一文盘点百度大脑增援疫情防控的AI操作
  2. 网易云音乐的消息队列改造之路
  3. pytorch多标签分类交叉熵loss
  4. operator new/delete,operator-> / *【C++运算符重载】
  5. (总结)Linux下多行合并成一行,中间加分隔符
  6. java班级管理系统代码_基于jsp的班级管理系统-JavaEE实现班级管理系统 - java项目源码...
  7. 物联网常见的无线传输协议类型
  8. PAT——1118 Birds in Forest 甲级
  9. 微信好友排行榜 最简教程 二
  10. Python程序员爬出百套美女写真集,同样是爬虫,他为何如此突出?
  11. STL 常用容器的底层数据结构实现
  12. HTML使用无序列表制作一级菜单和二级下拉菜单
  13. 关系数据库:理解一二三范式
  14. 房产微信小程序该怎么做?
  15. 制作拼多多app网页css,5+App下Mui框架开发仿拼多多App
  16. 设计模式-优惠券-策略模式
  17. 英语六级口语 计算机,2020年5月英语六级口语惯用口语:计算机
  18. 数字孪生应用白皮书(2020版)|PDF下载
  19. java udp心跳机制,Socket心跳包机制总结
  20. 表格识别论文阅读——《Robust Table Detection and Structure Recognition from Heterogeneous Document Images》

热门文章

  1. 约妹子打球却没订到场地?Python自动化帮你搞定
  2. 收藏 | 2020测绘国家及行业标准都在这了
  3. Windows XP 注册表优化方案
  4. python画对数与半对数坐标
  5. 在美国做长租房,是一门好生意吗?
  6. Windows Server 搭建Winmail服务器
  7. offset元素偏移量
  8. redhat-运维-(2)-selinux-no rout to host
  9. 深大uooc学术道德与学术规范教育第八章
  10. 斑马,跑在互联网上的汽车