工作室注册登录标签云赞助光荣榜

当前位置:首页 > 全栈分享 > html+css > 正文

css图片闪光效果实现代码及详细解读

发布时间:2019-05-17 22:42:23作者:魏义齐阅读:()评论:

本文为博主原创文章,未经博主允许不得转载。

昨天晚上突发奇想想给博客首页赞助光荣榜的钻石图标加个效果,我不想它在那静静地呆着,我想让它动起来引起访客的注意从而达到我设立赞助光荣榜的目的,我第一想到的动效就是闪光效果,毕竟钻石吗!

因为从来没写过这个效果,开始在网上找代码,但是基本上都是互相抄,比如https://www.cnblogs.com/vali/p/5658643.html,作者把代码搬过来效果是实现了但是有bug,比如动画执行时出现滚动条,而且该文章的代码加了权限,如果在本地测试会出现异常,具体怎么个异常大家可以用Dreamweaver在其代码基础上修改测试一下,既然把代码开源出来又为何要这样?作为一个代码网站连个代码高亮效果都没有,真是无力吐槽。

所以:与其看别人的代码理解其原理还不如自己想个原理然后用代码去实现。

本文不会直接上代码,但是不会的人跟着我的文章可以学会这个效果。

我的需求是:实现闪光效果,不是触发执行,连续执行;我的实现想法是:利用伪元素插入元素,利用linear-gradient赋予元素透明渐变效果,用animation定义动画对象,用@keyframes控制动画执行,具体实现流程如下:

html代码是

  1. <div class="img"><img src="images/tx16.jpg"></div> 

给div写样式

  1. .img { 
  2.     width300px
  3.     height300px
  4.     marginauto
  5.     positionrelative;/*用于伪元素的定位*/ 

插入伪元素

  1. .img:before { 
  2.     content""

刚开始我把伪元素设置的跟div一样大小,渐变方向是to bottom right,看起来还行,只是闪光部分略粗,但是执行起来闪光效果出现畸形,所以还是老老实实规定伪元素的大小吧

  1. .img:before { 
  2.     content""
  3.     width600px
  4.     height100px
  5.     positionabsolute
  6.     left: 0
  7.     top: 0

把伪元素的宽设置为600px是因为把伪元素旋转135度从左上角往右下角运动时会经过div的对角线,600px只是大概估了个值,我没按勾股定理算对角线的精确长度,超出的隐藏就行了。position: absolute;规定伪元素的初始位置,以防干扰其它元素。

  1. .img:before { 
  2.     content""
  3.     width600px
  4.     height100px
  5.     positionabsolute
  6.     left: 0
  7.     top: 0
  8.     transform: rotate(135deg); 
  9.     background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0)); 
  10.     animation: shanguang 2s infinite; 

当把伪元素旋转135度时渐变方向就应该是从上到下,linear-gradient中的to bottom是标准写法,其兼容写法必须在其上方(完整代码见文末),里面的三个rgba()代表渐变色,animation定义动画对象,执行一次用时两秒且连续执行。

但是让闪光效果一直闪就不太好了,闪光消失后应该停顿一会再再次闪,下面这样写可以实现:

  1. @keyframes shanguang { 
  2.  0% { 
  3.  left: -300px
  4.  top: 0
  5.  25% { 
  6.  left: 300px
  7.  top: 300px
  8.  100% { 
  9.  left: 300px
  10.  top: 300px

0%到25%动画从左上角到右下角就执行完了,25%到100%就让它停顿就可以。效果如下:

闪光效果

完整的样式代码如下:

  1. @charset "utf-8"
  2. /* CSS Document */ 
  3. * { 
  4.     margin0
  5.     padding0
  6. .img { 
  7.     width300px
  8.     height300px
  9.     marginauto
  10.     positionrelative
  11. .img:before { 
  12.     content""
  13.     width600px
  14.     height100px
  15.     positionabsolute
  16.     left: 0
  17.     top: 0
  18.     transform: rotate(135deg); 
  19.     -moz-transform: rotate(135deg); 
  20.     -ms-transform: rotate(135deg); 
  21.     -o-transform: rotate(135deg); 
  22.     -webkit-transform: rotate(135deg); 
  23.     background: -webkit-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0)); 
  24.     background: -o-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0)); 
  25.     background: -moz-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0)); 
  26.     background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0)); 
  27.     animation: shanguang 2s infinite; 
  28.     -webkit-animation: shanguang 2s infinite; 
  29. @keyframes shanguang { 
  30.  0% { 
  31.  left: -300px
  32.  top: 0
  33.  25% { 
  34.  left: 300px
  35.  top: 300px
  36.  100% { 
  37.  left: 300px
  38.  top: 300px
  39. @-webkit-keyframes shanguang { 
  40.  0% { 
  41.  left: -300px
  42.  top: 0
  43.  25% { 
  44.  left: 300px
  45.  top: 300px
  46.  100% { 
  47.  left: 300px
  48.  top: 300px

在实际应用中大家可能还会遇到伪元素影响其它元素的情况,这个大家用overflow:hidden或z-index自行解决。你可以点这里测试代码,图片在我网站找个绝对路径的图片即可。

ps:关于linear-gradient的另一个实例应用请看下面的相关阅读。

本文标签html架构和css思维 ,您可以阅读与「html架构和css思维 」相关的所有文章

魏义齐全栈技术交流:魏义齐全栈技术交流

上一篇:如何修改select右边小三角的样式下一篇:css3背景色渐变的动画实例应用

原创不易,您的赞助就是博主更新的动力!

赞助请备注,8.88元及以上可在赞助光荣榜留下外链信息。

HashOver畅言云评完全自托管的评论系统

工作室注册登录标签云赞助光荣榜

最新会员
  • 东方星雨
  • deanhan
  • 1264822519
  • aini3311
  • a1051020101
  • weiyiqi