最近关注了油管上的 CSS Animation Effects Tutorial 系列,里面介绍了很是多有意思的 CSS 动效。其中第一个就是很酷炫的霓虹灯效果,这里就实现思路作一个简单的记录和分享。
这是要实现的效果:css
能够看到,在鼠标移入按钮的时候,会产生相似霓虹灯光的效果;在鼠标移出按钮的时候,会有一束光沿着固定的轨迹(按钮外围)运动。html
霓虹灯光的实现比较简单,用多重阴影来作便可。咱们给按钮加三层阴影,从内到外每层阴影的模糊半径递增,这样的多个阴影叠加在一块儿,就能够造成一个相似霓虹灯光的效果。这段的代码以下:动画
HTML:spa
<div class="light"> Neon Button </div>
CSS:code
body { background: #050901; } .light { width: fit-content; padding: 25px 30px; color: #03e9f4; font-size: 24px; text-transform: uppercase; transition: 0.5s; letter-spacing: 4px; cursor: pointer; } .light:hover { background-color: #03e9f4; color: #050801; box-shadow: 0 0 5px #03e9f4, 0 0 25px #03e9f4, 0 0 50px #03e9f4, 0 0 200px #03e9f4; }
最终的效果以下:orm
虽然看起来只有一个光束沿着按钮的边缘运动,但实际上这是四个光束沿着不一样方向运动以后叠加的效果。它们运动的方向分别是:从左往右、从上往下、从右往左、从下往上,以下图所示:htm
在这个过程当中,光束和光束之间产生了交集,若是只看按钮的边缘部分,就很像是只有一个光束在作顺时针方向的运动。图片
下面是具体实现中几个须要注意的点:ci
div.light
的四个子 div,初始位置分别是在按钮的最左侧、最上方、最右侧和最下方,并按照固定的方向作重复的运动div.light
设置一个溢出隐藏代码以下:element
HTML:
<div class="light"> <div></div> <div></div> <div></div> <div></div> Neon Button </div>
CSS:
.light { position: relative; padding: 25px 30px; color: #03e9f4; font-size: 24px; text-transform: uppercase; transition: 0.5s; letter-spacing: 4px; cursor: pointer; overflow: hidden; } .light:hover { background-color: #03e9f4; color: #050801; box-shadow: 0 0 5px #03e9f4, 0 0 25px #03e9f4, 0 0 50px #03e9f4, 0 0 200px #03e9f4; } .light div { position: absolute; } .light div:nth-child(1){ width: 100%; height: 2px; top: 0; left: -100%; background: linear-gradient(to right,transparent,#03e9f4); animation: animate1 1s linear infinite; } .light div:nth-child(2){ width: 2px; height: 100%; top: -100%; right: 0; background: linear-gradient(to bottom,transparent,#03e9f4); animation: animate2 1s linear infinite; animation-delay: 0.25s; } .light div:nth-child(3){ width: 100%; height: 2px; bottom: 0; right: -100%; background: linear-gradient(to left,transparent,#03e9f4); animation: animate3 1s linear infinite; animation-delay: 0.5s; } .light div:nth-child(4){ width: 2px; height: 100%; bottom: -100%; left: 0; background: linear-gradient(to top,transparent,#03e9f4); animation: animate4 1s linear infinite; animation-delay: 0.75s; } @keyframes animate1 { 0% { left: -100%; } 50%,100% { left: 100%; } } @keyframes animate2 { 0% { top: -100%; } 50%,100% { top: 100%; } } @keyframes animate3 { 0% { right: -100%; } 50%,100% { right: 100%; } } @keyframes animate4 { 0% { bottom: -100%; } 50%,100% { bottom: 100%; } }
这样就能够达到文章开头图片的效果了。
若是想要其它颜色的霓虹灯光效果怎么办呢?是否须要把相关的颜色从新修改一遍?其实咱们有更简单的方法,就是使用 filter:hue-rotate(20deg)
一次性修改 div.light
和内部全部元素的色相/色调。
The
hue-rotate()
CSS function rotates the hue of an element and its contents.
最终效果以下: