当前位置:首页 > 全栈分享 > html+css > 正文
css图片闪光效果实现代码及详细解读
发布时间:2019-05-17 22:42:23作者:魏义齐阅读:()评论:
昨天晚上突发奇想想给博客首页赞助光荣榜的钻石图标加个效果,我不想它在那静静地呆着,我想让它动起来引起访客的注意从而达到我设立赞助光荣榜的目的,我第一想到的动效就是闪光效果,毕竟钻石吗!
因为从来没写过这个效果,开始在网上找代码,但是基本上都是互相抄,比如https://www.cnblogs.com/vali/p/5658643.html,作者把代码搬过来效果是实现了但是有bug,比如动画执行时出现滚动条,而且该文章的代码加了权限,如果在本地测试会出现异常,具体怎么个异常大家可以用Dreamweaver在其代码基础上修改测试一下,既然把代码开源出来又为何要这样?作为一个代码网站连个代码高亮效果都没有,真是无力吐槽。
所以:与其看别人的代码理解其原理还不如自己想个原理然后用代码去实现。
本文不会直接上代码,但是不会的人跟着我的文章可以学会这个效果。
我的需求是:实现闪光效果,不是触发执行,连续执行;我的实现想法是:利用伪元素插入元素,利用linear-gradient赋予元素透明渐变效果,用animation定义动画对象,用@keyframes控制动画执行,具体实现流程如下:
html代码是
- <div class="img"><img src="images/tx16.jpg"></div>
给div写样式
- .img {
- width: 300px;
- height: 300px;
- margin: auto;
- position: relative;/*用于伪元素的定位*/
- }
插入伪元素
- .img:before {
- content: "";
- }
刚开始我把伪元素设置的跟div一样大小,渐变方向是to bottom right,看起来还行,只是闪光部分略粗,但是执行起来闪光效果出现畸形,所以还是老老实实规定伪元素的大小吧
- .img:before {
- content: "";
- width: 600px;
- height: 100px;
- position: absolute;
- left: 0;
- top: 0;
- }
把伪元素的宽设置为600px是因为把伪元素旋转135度从左上角往右下角运动时会经过div的对角线,600px只是大概估了个值,我没按勾股定理算对角线的精确长度,超出的隐藏就行了。position: absolute;规定伪元素的初始位置,以防干扰其它元素。
- .img:before {
- content: "";
- width: 600px;
- height: 100px;
- position: absolute;
- left: 0;
- top: 0;
- transform: rotate(135deg);
- background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0));
- animation: shanguang 2s infinite;
- }
当把伪元素旋转135度时渐变方向就应该是从上到下,linear-gradient中的to bottom是标准写法,其兼容写法必须在其上方(完整代码见文末),里面的三个rgba()代表渐变色,animation定义动画对象,执行一次用时两秒且连续执行。
但是让闪光效果一直闪就不太好了,闪光消失后应该停顿一会再再次闪,下面这样写可以实现:
- @keyframes shanguang {
- 0% {
- left: -300px;
- top: 0;
- }
- 25% {
- left: 300px;
- top: 300px;
- }
- 100% {
- left: 300px;
- top: 300px;
- }
- }
0%到25%动画从左上角到右下角就执行完了,25%到100%就让它停顿就可以。效果如下:
完整的样式代码如下:
- @charset "utf-8";
- /* CSS Document */
- * {
- margin: 0;
- padding: 0;
- }
- .img {
- width: 300px;
- height: 300px;
- margin: auto;
- position: relative;
- }
- .img:before {
- content: "";
- width: 600px;
- height: 100px;
- position: absolute;
- left: 0;
- top: 0;
- transform: rotate(135deg);
- -moz-transform: rotate(135deg);
- -ms-transform: rotate(135deg);
- -o-transform: rotate(135deg);
- -webkit-transform: rotate(135deg);
- background: -webkit-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0));
- background: -o-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0));
- background: -moz-linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0));
- background: linear-gradient(to bottom, rgba(255,255,255,0), rgba(255,255,255,0.2), rgba(255,255,255,0));
- animation: shanguang 2s infinite;
- -webkit-animation: shanguang 2s infinite;
- }
- @keyframes shanguang {
- 0% {
- left: -300px;
- top: 0;
- }
- 25% {
- left: 300px;
- top: 300px;
- }
- 100% {
- left: 300px;
- top: 300px;
- }
- }
- @-webkit-keyframes shanguang {
- 0% {
- left: -300px;
- top: 0;
- }
- 25% {
- left: 300px;
- top: 300px;
- }
- 100% {
- left: 300px;
- top: 300px;
- }
- }
在实际应用中大家可能还会遇到伪元素影响其它元素的情况,这个大家用overflow:hidden或z-index自行解决。你可以点这里测试代码,图片在我网站找个绝对路径的图片即可。
ps:关于linear-gradient的另一个实例应用请看下面的相关阅读。
相关阅读
上一篇:如何修改select右边小三角的样式下一篇:css3背景色渐变的动画实例应用
原创不易,您的赞助就是博主更新的动力!
赞助请备注,8.88元及以上可在赞助光荣榜留下外链信息。
完全自托管的评论系统
-
东方星雨
-
deanhan
-
1264822519
-
aini3311
-
a1051020101
-
weiyiqi
- css3实现打字效果(详细解析,单行光标消失)(1785)
- 如何修改select右边小三角的样式(1232)
- 前端经验分享之上传工具的使用和扒改网页(1226)
- css3背景色渐变的动画实例应用(823)
- cms系统loop循环造成的页面布局问题如何解决(804)
- 盘点竞价手机网页对meta标签的特殊需求(595)
- css图片闪光效果实现代码及详细解读(581)
- 悬浮窗紧贴网页主内容区定位的方法(540)
- 博客改版技术总结:input的radio样式兼容和ios微信里hover效果兼容(509)
- 前端经验分享之定位(444)
- css图片闪光效果实现代码及详细解读(2019-05-17)
- css3背景色渐变的动画实例应用(2019-01-06)
- css3实现打字效果(详细解析,单行光标消失)(2019-01-03)
- 一场由css代码里“{}”前的空格引起的风波(2018-10-05)
- 悬浮窗紧贴网页主内容区定位的方法(2018-09-11)