css 对象被放置在Div之上,尽管它在后面?

k4emjkb1  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(110)

我正在开发一个React Web应用程序,我正在实现的功能之一是在鼠标光标后面有一个“blob”。这个斑点是模糊的,通过放置另一个div在它上面,并使用backdrop-filter(我得到同心圆,如果我没有这样做)。这个很好用。但是,当我在blob对象上放置另一个div时,backdrop-filter似乎也模糊了其他所有内容。
下面是我的Blob的ReactJS代码:

import { useEffect } from "react";

const Blob = () => {
    useEffect(() => {
        const myBlob = document.getElementById("blob");

        if(myBlob) {
            document.body.onpointermove = event => {
                const {clientX, clientY} = event;
        
                myBlob.animate({
                    left: `${clientX - 150}px`,
                    top: `${clientY - 100}px`
                }, {duration: 3000, fill: "forwards"});
            }
        }
    }, [])
    
    
    
    return (
        <div>
            <div id="blob" className="blob"></div>
            <div id="blur" className="blur"></div>
        </div>
        
    );
}

export default Blob;

下面是我的ReactJS代码,用于页面的其余部分:

import Blob from "../atoms/trinkets/Blob";
const Home = () => {
    return (
        <div className="return-container">
            <Blob/>
            <div className="block"></div>
        </div>
    )
}

export default Home;

下面是我的CSS:

.blob {
    background: linear-gradient(to right, aquamarine, mediumpurple);
    height: 200px;
    width: 300px;
    position: absolute;
    top: 50%;
    left: 50%;
    border-radius: 50%;
    animation: rotate360 20s infinite;
}

.blur {
    height: 100%;
    position: absolute;
    width: 100%;
    z-index: 2;
    backdrop-filter: blur(75px);
}

@keyframes rotate360 {
    from {
        transform: rotate(0deg);
    }

    to {
        transform: rotate(360deg);
    }
}

.block {
    height: 500px;
    width: 500px;
    background-color: pink;
    z-index: 5;
}

无论我怎么尝试,#blur div都将背景滤镜置于其他所有滤镜之上。我检查了开发工具,看看所有的东西都被放置在哪里,并可以确认.block div出现在其他所有东西的顶部

vdgimpew

vdgimpew1#

block并不高于一切,它实际上是最底层

图层的顺序
1.#blur(最上方图层)
1.#blob
1.#块(最底层)
这意味着div#blur在所有元素之上,这是因为*在DOM中*它在div#blob之后,并且由于它们具有相同的position:absolute,因此最后一个元素将覆盖第一个元素(div#bluroverridediv#blob
你的**#blur有一个z-index: 2,这是不必要的,因为它将在#blob之上,因为正如我们所说,它在DOM中在#blob**之后

div#block根本没有position:absolute,这意味着它在最后一层(div#blurdiv#blob的底部)

因为#block没有position,所以它不应该接受z-index属性
我认为你可以查找视频或文章谈论Position in CSS,你会很好FeeCodeCamp Article

相关问题