今天要给大家分享的是一个很不错的CSS发光按钮,一共有6种不同的发光动画特效。
首先来看一看效果:
转动

滑动

闪烁

波动

搏动

脉冲

如果你觉得效果还比较满意,那么请往下看,看看这些个花里胡哨的动画都是怎么实现的。
要实现CSS的发光动画,无外乎是对以下几种CSS技术的组合使用:
box-shadow 属性
filter 属性
text-shadow 属性
SVG滤镜
CSS动画(@keyframes)或过渡(transition)
混合模式(Blend Modes)
本文这个发光按钮主要采用了CSS动画属性以及mask-image属性,发光层其实就是自定义的遮罩层。
转动发光动画
首先来看看第一个转动发光动画的CSS代码:
@-webkit-keyframes spin {
0% {
--mask: 0deg;
}
100% {
--mask: 360deg;
}
}
@keyframes spin {
0% {
--mask: 0deg;
}
100% {
--mask: 360deg;
}
}这里--mask是一个自定义属性,定义了发光遮罩层的角度属性:
@property --mask {
syntax: "";
inherits: false;
initial-value: 33deg;
} 这里我们可以看到,整个按钮的发光遮罩层角度从0-360不停变换,这样就可以出现边缘光影不停旋转的视觉效果。
这里大家注意到一个细节没,同样的动画属性为什么要写两遍,其中一个属性前缀加了“-webkit”?这里我对新手解释一下:
CSS前缀 -webkit 是用来指定只针对使用了WebKit引擎(如Chrome,Safari)的浏览器的样式规则的。这个前缀是为了让开发者能够使用最新的CSS特性,而不用担心老版本的浏览器兼容性问题。如果你只关心WebKit浏览器,你可以省略不带前缀的规则,只保留 -webkit 前缀的版本。但通常为了兼容更多的浏览器,开发者会同时提供带前缀和不带前缀的版本。
为节省篇幅,文章后面的示例代码中我都省略了-webkit。
滑动发光动画
大家肯定会猜,上一个是改变发光遮罩层的角度,这个是不是改变位置就可以了?
答对了,你真是个大聪明,上代码吧:
@keyframes wipe {
0% {
mask-position: 200% center;
}
100% {
mask-position: 0% center;
}
}是不是很简单
闪烁发光动画
这个怎么说呢,比较复杂,但又没那么复杂,说它复杂,主要是因为你得设计好不同动画帧之间的渲染效果,才能出来自然流畅的闪烁动画,不像前面那两种指定0%和100%即可。
但其实也简单,只不过是在不同的动画帧之间改变遮罩层的透明度而已:
@keyframes flicker {
0% { opacity:0.1; mask-image:none;}
1% { opacity:1; }
2% { opacity:0.5; }
3% { opacity:0.1; }
4% { opacity:0.7; }
5% { opacity:1; }
7% { opacity:0.7; mask-image: linear-gradient(90deg, transparent 15%, black 45%, black 55%, transparent 85%);}
8% { opacity:0.1; }
10% { opacity:0.4; }
13% { opacity:1; }
15% { opacity:0.1;mask-image: linear-gradient( 45deg, rgba(0,0,0,0.4) 25%, transparent 45%, black 65%, black 90%, transparent 100%);}
17% { opacity:0.8;}
19% { opacity:0.3; }
21.5% { opacity:0; }
23% { opacity:1; }
39% { opacity:0.7; }
45% { opacity:0.2; }
49% { opacity:0.9; }
52% { opacity:0.7;}
53.5% { opacity:0.2; mask-image: linear-gradient(90deg, black 15%, black 45%, rgba(0,0,0,0.4) 75%, transparent 85%);}
57% { opacity:0.8; }
63% { opacity:1; }
75% { opacity:.85; }
77% { opacity:1; }
80% { opacity:.9; }
82% { opacity:.95; }
83% { opacity:.85; }
86% { opacity:1; }
89% { opacity:.85; }
91% { opacity:1; }
92% { opacity:.9; }
100% { opacity:1; }
}波动发光动画
波动发光和滑动发光的原理其实是一样的,不同的是,波动效果除了需要改变遮罩层的位置外,还需要改变遮罩层的大小,形成波形的视觉效果:
button:not([disabled])[data-effect=wave] .shimmer {
mask-image: linear-gradient(90deg, transparent 15%, black 45%, black 55%, transparent 85%);
mask-size: 200% 200%;
mask-position: center;
animation: wipe 3s linear infinite both -0.5s;
}搏动和脉冲效果
这两种发光效果其实是同一类的,严格来说都属于脉冲动画,最终的效果就像心脏搏动一样。
其原理也是改变遮罩层的透明度:
搏动效果
@keyframes pulse {
0%, 90%, 100% {
opacity: 0;
}
20% {
opacity: 1;
}
}脉冲效果
@keyframes pulse2 {
0% {
opacity: 0;
}
8% {
opacity: 1;
}
14% {
opacity: 0;
}
20% {
opacity: 1;
}
100% {
opacity: 0;
}
}源码下载:点击这里