gpt4 book ai didi

CSS 过渡和 z-index

转载 作者:技术小花猫 更新时间:2023-10-29 11:02:14 25 4
gpt4 key购买 nike

我有一个带有下拉菜单的固定顶部导航栏。我想在悬停时滑动下拉菜单。我希望菜单在滑入时位于导航栏后面。所以我只是尝试设置这两个元素的 z-index 不幸的是这对我不起作用。

这里是一个简化的例子(codepen)

html

<div class="fixed-top">
<span class="trigger">hover me</span>
<div class="menu"></div>
</div>

CSS

.fixed-top {
background: #3b5999;
height: 50px;
width: 100%;
padding: 0;
top: 0;
position: fixed;
z-index: 2;
}

.trigger {
z-index: 2;
font-size: 33px;
color: white;
margin-left: 50%;
}

.trigger:hover + .menu {
margin-top: 0;
}

.menu {
z-index: 1;
height: 300px;
background-color: #1c7754;
width: 400px;
margin: auto;
margin-top: -400px;
transition: all 0.75s ease-out;
}

如果不清楚我想在这里做什么一个简单的 mspaint 草图 ;)

mspaint skills confirmed

最佳答案

当开始在 CSS 中使用堆叠上下文时,这是一个非常常见的错误。基本上,您只需要记住,子项不能存在于与父项不同的堆栈上下文中。

因此,如果我有一个非静态元素(意味着一个具有 position: anything-but-static [fixed, relative, absolute] 的元素),并且如果该元素没有非静态父元素元素,那么无论它在 DOM 中的哪个位置,它都将处于堆栈上下文级别 1。现在,如果该元素具有非静态子元素,则该子元素将处于堆栈上下文级别 2。它不能与其父元素处于同一级别(级别 1)z-index 只能影响相同层叠上下文级别的元素,它与不同层叠上下文级别的元素无关。

解决方案是重构您的 HTML,或者只使用 :before:after 伪元素,因此:

.fixed-top {
height: 50px;
width: 100%;
padding: 0;
top: 0;
position: fixed; /* The parent: stacking context level 1 */
}
.fixed-top:before {
background: #3b5999;
content:'';
position: absolute; /* stacking context level 2 */
top: 0; right: 0; bottom: 0; left: 0;
z-index: 1;
}
.trigger {
color: white;
font-size: 33px;
margin-left: 50%;
position: relative; /* also stacking context level 2 */
z-index: 2;
}
.trigger:hover + .menu {
margin-top: 0;
}
.menu { /* bottom layer -- no stacking context necessary */
z-index: 0;
height: 300px;
background-color: #1c7754;
width: 400px;
margin: auto;
margin-top: -400px;
transition: all 0.75s ease-out;
}

注意表示堆叠上下文级别的注释。

这是一个 JSFiddle举个例子。

关于CSS 过渡和 z-index,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33908439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com