backdrop-filter(純CSS實現絲滑邊框線條動畫)

jialiangzai發表於2024-05-30

即便絕對定位的子盒子視覺上覆蓋在父盒子上,導致父盒子的內容或背景不可見,backdrop-filter 依然作用於父盒子自己的背景及背後的內容上。簡而言之,backdrop-filter 是針對元素自身及其背後內容的一個效果,它不受該元素內子元素定位方式的影響。因此,即便子盒子“脫標”,父盒子的 backdrop-filter 依然可以對其背後的內容生效,只是可能由於子盒子的遮擋,視覺上不容易直接觀察到這一效果。

點選檢視程式碼
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>純CSS實現絲滑邊框線條動畫</title>
</head>
<style>
    body {
        background-color: black;
    }

    .outer {
        position: relative;
        width: 400px;
        height: 200px;
        margin: 50px;
        /* 確保有足夠空間顯示動畫 */
        border-radius: 30px;
        overflow: hidden;
        padding: 1px;
    }

    .inner {
        background: rgba(9, 9, 11, 0.38);
        border: 1px solid rgb(30, 41, 59);
        width: 100%;
        height: 100%;
        border-radius: 30px;
        -webkit-backdrop-filter: blur(24px);
        backdrop-filter: blur(24px);
        box-sizing: border-box;
    }

    .moving-element {
        position: absolute;
        top: 0;
        left: 40px;
        width: 80px;
        height: 80px;
        background-image: radial-gradient(#cbacf9 40%, transparent 80%);
        border-radius: 40px;
        animation: moveAround 8s linear infinite;
        transform: translate(-40px, -40px);
    }

    @keyframes moveAround {

        0% {
            left: 40px;
            top: 0px;
        }

        28.93% {
            left: 360px;
            top: 0px;
        }

        33.99% {
            left: 400px;
            top: 40px;
        }

        44.82% {
            left: 400px;
            top: 160px;
        }

        49.88% {
            left: 360px;
            top: 200px;
        }

        78.81% {
            left: 40px;
            top: 200px;
        }

        83.87% {
            left: 0px;
            top: 160px;
        }

        94.70% {
            left: 0px;
            top: 40px;
        }

        100% {
            left: 40px;
            top: 0px;
        }
    }
</style>

<body>
    <div class="outer">
        <div class="moving-element">

        </div>
        <div class="inner">

        </div>

    </div>
</body>

</html>

相關文章