最近找到了一个css3做的天气图标,里面有个雷阵雨的图标,于是就研究了下上面的闪电动画是怎么实现的。
先来看下最终效果图:

它主要用到是以下几个css3属性:
1.border
2.after和before
3.transform:skewX
4.nth-child(n)
5.animation

一、利用border画出三角形

border,是设置边框的,一般我们都只会设置1px,画一个细细的边框。下面我们看下设置粗一点的边框会是什么样的。

<style>
.bolt{position:absolute;
top:50%;
left:50%;
border-top:1em solid red;
border-right:1em solid blue;
border-bottom:1em solid green;
border-left:1em solid black;
}
</style>
<div class="bolt"></div>

为了看出每条边框的分布,我们将上右下左四条边框单独设置,颜色也设置成不一样的。显示效果为下图左侧的样子:

然后,我们将上下的边框宽度修改下,就可以看到上图右侧的效果了。
接着,我们将上边框和左边框的颜色改成透明的:

border-top:2em solid transparent;
border-right:1em solid blue;
border-bottom:2em solid green;
border-left:1em solid transparent;

这时,三角形就出现了,显示效果如下:

二、利用伪元素before和after画两个三角形

:before 伪元素在元素之前添加内容。
:after 伪元素在元素之后添加内容。
简单例子如下:

<script>
.demo:before{content="前面";
}
.demo:after{content="后面";
}
</script>
<div class="demo">中间</div>

显示如下:

上面这个就是伪元素before和after的简单使用了,但是我们这边不用来显示文字,而是显示边框。

<style>
.bolt{position:absolute;top:50%;left:50%;
}
.bolt::before{content:"";position:absolute;margin-top:-3em;margin-left:-1.5em;border-top:2em solid transparent;border-right:1em solid blue;border-bottom:2em solid green;border-left:1em solid transparent;
}
.bolt::after{content:"";position:absolute;margin-left:-0.5em;border-top:2em solid red;border-right:1em solid transparent;border-bottom:2em solid transparent;border-left:1em solid black;
}
</style>
<div class="bolt"></div>

这里注意,content和position一定要设置。显示如下:

三、使用transform:skewX将图案旋转

transform:skewX(angle):定义沿着X轴的2D倾斜转换。
在.bolt中加入transform:skewX(-10deg)

.bolt{position:absolute;top:50%;left:50%;transform:skewX(-10deg);
}

也可以顺便将颜色统一改成yellow,一个闪电图案就出来了,显示如下:

四、使用nth-child(n)设置小闪电属性

:nth-child(n) 选择器匹配属于其父元素的第 N 个子元素,不论元素的类型。(这里我们配合class选择器使用)

我们要画一个小闪电在旁边的话,只需要多加个div就可以了

<div class="bolt"></div>
<div class="bolt"></div>

但是,这时候,两个闪电属性完全一样,是重叠在一起的,我们又需要给第二个闪电设置单独的属性。我们可以给它设置id,或加个class,也可以用nth-child(n)选择器来设置,只需要修改css,不用修改html。

.bolt:nth-child(2){margin-top:5em;margin-left:2em;font-size:0.5em;
}

注:由于我们上面用的单位是em,所以这里就可以使用font-size来直接修改div的大小。

因为,nth-child(n)是针对其父元素进行查找的,为了方便查找和后续的维护工作,我们在bolt上加一级div,将它的父元素由body改成这个div。

<div id="lightning">
<div class="bolt"></div>
<div class="bolt"></div>
</div>

然后,我们来看下效果:

到这里,我们就把一大一小两个闪电画好了,下面再添加个css动画,让闪电动起来。

五、用animation添加css动画

添加动画分两步:
1、设置动画的属性变化
2、为元素加上动画
我们先来设置闪电的动画属性变化。
变化是这样的:让闪电快速亮起两次,然后第二次的时候慢慢消失

@keyframes lightning-anim {0%{opacity:0;}5% {opacity:1;}10% {opacity:0;}15% {opacity:1;}100% {opacity:0;}
}

上面动画属性里的百分比指的是时间到达百分多少时,使用对应的属性。
然后,我们给bolt这个元素加上动画

.bolt{position:absolute;top:50%;left:50%;transform:skewX(-10deg);animation: lightning-anim 2s linear infinite;
}

到此,完整的闪电效果就大功告成了。

这里要说下的是,因为before、after这两个伪元素上,我们设置的是边框border的颜色,所以bolt元素上动画改变颜色color是不会生效的,除非border的颜色值使用currentColor,或者动画放在伪元素上,且动画改变的属性是border。

还有一点就是,如果你要兼容老版本的多浏览器,你就需要在动画属性和设置动画的前面加上各种前缀:
1、-moz-代表firefox浏览器私有属性
2、-ms-代表ie浏览器私有属性
3、-webkit-代表safari、chrome私有属性
4、-o-代表Opera
如:

@-webkit-keyframes lightning-anim{}
-webkit-animation:lightning-anim 2s linear infinite;

具体代码可以下载我上传的资源。demo源码

css3实现一个闪电效果相关推荐

  1. [css] 使用css3做一个魔方旋转的效果

    [css] 使用css3做一个魔方旋转的效果 总的来说,用了一些 3D 效果的样式,如 translate3d,rotate3d,perspective,transform-style: preser ...

  2. [css] 使用css3实现一个斑马线的效果

    [css] 使用css3实现一个斑马线的效果 @ferrinweb 如果需要很多或者无限扩展的斑马线,你这个方案就有缺点了 @cxwht 你的方案需要增加额外的元素,不太理想 最好的办法是用渐变背景实 ...

  3. css3新增了哪三种边框效果,怎么在CSS3中实现一个边框效果

    怎么在CSS3中实现一个边框效果 发布时间:2021-03-11 18:01:54 来源:亿速云 阅读:125 作者:Leah 怎么在CSS3中实现一个边框效果?相信很多没有经验的人对此束手无策,为此 ...

  4. css3做一个loading动画效果(详细思路)

    纯css3的动画做效果: 小人来回移动,碰到小球时,小球消失. 首先,html搭建结构: <body><div class="wrapper"><di ...

  5. 【web前端特效源码】使用HTML5+CSS3制作一个会动的音频loading加载动画效果~~适合初学者~超简单~ |前端开发|IT编程

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会动的音频loading加载动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTY ...

  6. 【web前端特效源码】使用HTML5+CSS3制作一个会动的不规则斑点边框半径动画的动画效果~~适合初学者~超简单~ |前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会动的不规则斑点边框半径动画的动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCT ...

  7. css3 做一个会动的菜单 menu 按钮动画效果

    css3 做一个会动的菜单 menu 按钮动画效果 需要做一个会的动画按钮效果,小前端部知道如何实现,我看了一眼需要的效果,给他写了一个简单的 demo. 设计师给了俩图片,一个是 三 这样的菜单图标 ...

  8. 【web前端特效源码】使用HTML5+CSS3制作一个会动的电脑桌面+昼夜变化动画效果~~适合初学者~超简单~ |前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会动的电脑桌面+昼夜变化动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYPE ...

  9. 【web前端特效源码】使用HTML5+CSS3制作一个会促销广告滚动字幕3D动画效果~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会促销广告滚动字幕3D动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYPE ...

最新文章

  1. 从github上下载项目到eclipse
  2. Linux系统下的/etc/nsswitch.conf文件
  3. 一个半径为r的球体均匀带电_静电现象——一个易被忽略的细节
  4. java参数化查询_小博老师解析Java核心技术 ——JDBC参数化查询(二)
  5. hive不在同一台机 hue_环境篇:呕心沥血@CDH线上调优
  6. 计算一列中某个值的个数
  7. 安全强化linux-SELinux
  8. Katalon Recorder录制脚本
  9. 真正的技术大牛,可能根本不写代码
  10. linux多播 多个接收方,在同一端口上接收多个多播源 – C,Linux
  11. 书单:交互设计书籍推荐
  12. C语言经典笔试题解析,原来微软笔试题也有简单的,C语言学习专题
  13. VR乒乓球项目Unity3D 开发经验整理,4简单而有效的AI
  14. 有太多工作要做,传蚂蚁集团IPO可能推迟至2022年
  15. Linux WiFi Deauthenticated Reason Code说明
  16. Android色彩特效处理之色调、饱和度、亮度、ColorMatrix精炼详解
  17. 破解中国电信华为无线猫路由(HG522-C)自动拨号+不限电脑数+iTV
  18. python自动化和教程_python自动化基本技术原理
  19. 使用cucumber ,想把一个完整的流程,写成一个可执行的自动化测试脚本,应该如何划分 Scenario...
  20. 亚洲金融危机会否重来 人民日报(海外版) 2007年6月11日

热门文章

  1. WLAN and Wi-Fi
  2. 数字电路组合逻辑时序逻辑竞争-冒险总结
  3. 《Unix-Linux编程实践教程》读书笔记(一)
  4. 快速学习-Saturn(英文版入门指引)
  5. LAMMPS学习系列(14)
  6. 单行文本垂直居中和多行文本垂直居中以及font字体
  7. OJ_几点几分几秒_1244
  8. MayaAPI官方案例asciiToBinary的修改,实现ma和mb格式互转
  9. 转载:自动驾驶之软件定义汽车
  10. 了解redis队列原理