锥型渐变实现流光按钮

最近在公司写年终项目,UI设计稿给了一个背景各种渐变然后在按钮中心旋转的动画效果,市面上大都是边框流光和线性渐变的流光,这里记录一下通过锥形渐变实现的中心旋转流光按钮。

原理

其实和边框,线性渐变的流光按钮没什么不同,都是通过放一个元素写好背景色在按钮下面不停的旋转。

效果


<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
        <style>
            .dutyStartBtn {
                width: 280px;
                height: 58px;
                border-radius: 33px;
                font-size: 21px;
                color: #ffffff;
                position: relative;
                /* 设置溢出隐藏拦截多余部分 */
                overflow: hidden;
                margin: 100px auto;
            }
            .dutyStartBtn::after {
                /* 通过伪元素实现旋转的锥形渐变背景 */
                border-radius: 33px;
                content: "";
                position: absolute;
                width: 100%;
                height: 800%;
                left: 50%;
                top: 50%;
                transform: rotate(0deg) translate(-50%, -50%);
                background: conic-gradient(
                    #4a3dff,
                    #1715ff,
                    #2226ff,
                    #00ffff,
                    #2a4eff,
                    #2515ff,
                    #211aff,
                    #9d2dff,
                    #c71eff
                );
                /* 通过高斯模糊调整效果 */
                filter: blur(40px);
                /* 设置旋转中心点 */
                transform-origin: 0 0;
                /* 应用旋转动画 */
                animation: rotate-bg 5s linear infinite;
            }
            .btn {
                width: 100%;
                height: 100%;
                display: flex;
                align-items: center;
                justify-content: center;
                position: absolute;
                left: 0;
                top: 0;
                /* 使文字在背景之上 */
                z-index: 1;
            }
            /* 旋转动画 */
            @keyframes rotate-bg {
                from {
                    transform: rotate(0deg) translate(-50%, -50%);
                }
                to {
                    transform: rotate(360deg) translate(-50%, -50%);
                }
            }
        </style>
    </head>
    <body>
        <div>
            <div>流光按钮</div>
        </div>
    </body>
</html>