【问题标题】:Sticky header: sub menu doesn't show up粘性标题:子菜单不显示
【发布时间】:2019-08-28 22:58:48
【问题描述】:

我试图找到答案,但似乎没有什么适用于我的情况。

我有一个标题,包括一个上部空间(在我的例子中称为“void”)和一个位于其下方的菜单。

向下滚动时,标题向上,菜单按预期粘在屏幕顶部。

到目前为止一切顺利。

问题是这个菜单有一个子菜单。但是这个子菜单只有在菜单没有贴在屏幕顶部时才有效。

现在,我知道这是因为当菜单“固定”时,子菜单也应该“固定”定位,但在我的情况下,它只是不起作用,因为子菜单固定好了,但它消失在其余的后面页面,我给它的任何 z-index(或者我给页面的任何其他组件的任何 z-index,真的)。

所以我觉得我尝试了所有我能想到的东西,但我被困住了。

我做了一个 JSFiddle,你可以测试我的脚本。 要复制该错误,只需在标题未卡住时悬停菜单,然后向下滚动后,再次执行相同操作。 没有卡住的时候可以,但是卡住的时候不显示子菜单。

感谢您的帮助。

HTML

<header>
    <div class="void"></div>
    <nav class="menu">
        <ul class="block">
            <li class="item">xxxxx</li>
            <li class="item">xxxxx</li>
            <li class="item drop">Hover here
                <div class="dropdown-content">
                    <a href="">submenu 1</a>
                    <a href="">submenu 2</a>
                </div>
            </li>
            <li class="item">xxxxxx</li>
        </ul>
    </nav>
</header>

CSS

body{
    width:100%;
    height:6000px;
    margin:0px;
    padding:0px;
    background: #ccc;
}

header{
    position:relative;
    width:100%;
    background: #fff;
    z-index:1;
    height:146px;
}

.void{
    position:relative;
    width:100%;
    height:100px;
}

.menu{
    position:relative;
    width:100%;
    height:54px;
    background:#aaa;
}

.menu ul{
    height:100%;
    margin:0px;
    padding:0px;
    display:flex;
    flex-wrap: nowrap;
    justify-content: space-between;
}

.item{
    display:inline-block;
    flex-direction: column;
    height:100%;
    color:#41546F;
    line-height:54px;
    font-size:13px;
}

.block {
    position: relative;
    z-index:1;
}

.dropdown-content {
    display: none;
    position: absolute;
    min-width: 140px;
    z-index: 1;
    margin-left:-40px;
    margin-top:0px;
    background:#21242b;
    padding:16px;
}

.dropdown-content a {
    display: block;
    color:#a2a9b9;
    line-height:32px;
}

.drop a:hover {
    color: #fff;
}

.drop:hover .dropdown-content {
    display: block;
}

.fixed{
    position: fixed;
    overflow: hidden;
    left:0px;
    top: 0px;
}

JQUERY

$(window).scroll(function() {
    if ($(document).scrollTop() > 92){
        if (!$('.fixed').length){$('.menu').addClass('fixed');}
    } 
    else {
        if ($('.fixed').length){$('.menu').removeClass('fixed');}                  
    }     
});

JSFiddle

https://jsfiddle.net/3xnjeh01/

【问题讨论】:

    标签: jquery html css drop-down-menu sticky


    【解决方案1】:

    问题在于overflow: hidden 上的.fixed
    它隐藏了子菜单,您只需将其删除即可。

    .fixed {
        position: fixed;
        left: 0;
        top: 0;
    }
    

    【讨论】:

    • 嗯...它工作得很好,谢谢但是。在我自己的网页中,删除那里的溢出会阻止我悬停子菜单,因为它会在我离开上部菜单项后立即消失。无论出于何种原因,这不是 JSFIddle 的问题,尽管从技术上讲你解决了这个案例当我在这里播放时(谢谢)。我仍然保持这个问题开放一段时间,如果我在实际案例中解决了这个问题,我会关闭它或更新它。
    • 你有这个页面实时检查吗?可能还有更多我可以提供帮助的东西。
    • 是的,这是链接:phenotype.be/bonheur/v24/departements.php(可悬停的菜单现在是红色的)
    • 好的。我知道了。所以,看起来.shadow 元素是那里的问题,因为它的z:index: 1000。它正在与兄弟.top-menu 竞争。您可以为 .top-menu 添加 z-index,值为 1001 或更高,它应该可以工作。
    • 非常非常非常感谢 Azametzin。当我已经尝试降低“阴影”的 z-index 时,我想到了它,但没有任何成功,所以我只是认为它不是罪魁祸首。但实际上我从未想过增加“.top-menu”元素的z-index。我不认为它会有所作为,因为它感觉基本上是一样的。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    相关资源
    最近更新 更多