边框动画 单边追随

时间短就直接看第三个使用 clip-path + animation 完成。

复制代码
<!DOCTYPE html>
<html>

<head>
    <style>
        /* 第一个 */
        .btn {
            width: 100px;
            height: 40px;
            background: yellow;
            position: relative;
            display: flex;
            align-items: center;
            justify-content: center;
            border-radius: 5px;
            margin-left: 50px;
            margin-top: 50px;
            overflow: hidden;
        }

        .btn::before {
            content: '';
            width: 200%;
            height: 200%;
            background-color: red;
            animation: move 3s infinite linear;
            transform-origin: 0 0;
            position: absolute;
            top: 50%;
            left: 50%;
        }

        .btn::after {
            content: '';
            position: absolute;
            width: calc(100% - 8px);
            height: calc(100% - 8px);
            background-color: green;
        }

        .btn .name {
            z-index: 1;
        }


        @keyframes move {
            to {
                transform: rotate(1turn);
            }
        }



        /* 第二个 */

        .borderShow {
            width: 150px;
            height: 70px;
            margin: 30px;
            position: relative;
            border-radius: 6px;
            overflow: hidden;
            border: 1px solid red;
            display: flex;
            justify-content: space-around;
            align-items: center;

            &::after {
                content: '';
                position: absolute;
                top: 2px;
                left: 2px;
                width: calc(100% - 4px - 12px);
                height: calc(100% - 4px - 12px);
                text-align: center;
                border: 6px solid white;
                border-radius: 4px;
                background-color: #fff;
                animation: showRound 3s infinite linear;

            }



            /* 内部的盒子 */
            .borderShowCenter {
                position: absolute;
                top: 8px;
                left: 8px;
                width: calc(100% - 4px - 12px);
                height: calc(100% - 4px - 12px);
                text-align: center;
                border-radius: 4px;
                display: flex;
                justify-content: space-around;
                align-items: center;
                color: #fff;
                background-color: #c073ed;
                z-index: 10;
                /* 覆盖伪元素 */
            }
        }

        @keyframes showRound {

            /* box-shadow : x轴 y轴 模糊 放大 颜色; */
            0%,
            100% {
                box-shadow: 0px -66px 0px 0px #c073ed;
                /* 上 */
            }

            25% {
                box-shadow: 146px 0px 0px 0px #c073ed;
                /* 右 */
            }

            50% {
                box-shadow: 0px 66px 0px 0px #c073ed;
                /* 下 */
            }

            75% {
                box-shadow: -146px 0px 0px 0px #c073ed;
                /* 左 */
            }
        }



        /* 第三 */

        .clippath_wrap {
            /* width: 150px; */
            height: 70px;
            display: flex;
            align-items: center;
            justify-content: center;
            position: relative;

            &::before {
                content: "";
                position: absolute;
                top: 0;
                left: 0;
                right: 0;
                bottom: 0;
                border: 2px solid gold;
                animation: clippath 3s infinite linear;     

                border-radius: 5px
            }
        }

        @keyframes clippath {

            0%,
            100% {
                clip-path: inset(0 0 95% 0);
            }

            25% {
                clip-path: inset(0 95% 0 0);
            }

            50% {
                clip-path: inset(95% 0 0 0);
            }

            75% {
                clip-path: inset(0 0 0 95%);
            }
        }
    </style>
</head>

<body>


    <div class="btn"> <span class="name">按钮名称</span></div>



    <div class="borderShow">
        <div class="borderShowCenter">按钮</div>
    </div>


    <div class="clippath_wrap">第三个按钮</div>

</body>

</html>
相关推荐
v:ychya2018几秒前
独立站外贸建站公司怎么选?建站就要建营销型网站
前端·php
春涧草茶3 分钟前
慢就是快12-12手动抛出异常
java·linux·前端
三小河19 分钟前
从 Markdown 到 Generative UI:AI 如何从“生成答案”进化到“生成界面”?
前端·人工智能·后端
请为小H留灯24 分钟前
Windows 本地前端项目一键运行指南:Volta+Node+pnpm + 阿里镜像完整初始化流程
前端·pnpm·node·js
J船长42 分钟前
从 App 开发到 Unity 游戏开发:建立认知地图,结合 AI 开始实践
前端
牛奔1 小时前
mise 管理多版本 Go 项目
开发语言·前端·chrome·后端·golang
能源革命2 小时前
Vue 网格拖拽布局组件全景指南:7 大方案深度对比
前端·javascript·vue.js
PC2005_cloud2 小时前
AI 汉字漂移实录:它为什么总把「学习」写成日语「学習」
前端·后端
穆梓兰煊2 小时前
AI供应链安全不再只是包安全,还涉及模型与数据
前端·数据库