【问题标题】:z-index and box-shadow on CSS dropdown menu confusionCSS 下拉菜单混淆时的 z-index 和 box-shadow
【发布时间】:2013-03-19 05:59:22
【问题描述】:

http://jsfiddle.net/XwrZ6/

这显示了一个下拉菜单 (ul.sub-menu),其中框阴影应隐藏在主菜单栏条 (#main) 后面。我不明白为什么子菜单中的 box-shadow 出现在主导航栏上方 - 两个元素都已定位并设置了 z-index。

(为此,下拉菜单是永久显示的,显然在直播时它只会在父 li 悬停时显示)。

谢谢。

HTML:

<nav id="main">
<div class="mw">
    <div class="menu-main-menu-container">
        <ul>
            <li><a href="#">Item 1</a></li>
            <li><a href="#">Item 2</a></li>
            <li><a href="#">Item 3</a></li>
            <li><a href="#">Item 4</a>
                <ul class="sub-menu">
                    <li><a href="#">Sub 1</a></li>
                    <li><a href="#">Sub 2</a></li>
                    <li><a href="#">Sub 3</a></li>
                    <li><a href="#">Sub 4</a></li>
                </ul>
            </li>
       </ul>
    </div>                  
</div>
</nav>

CSS:

/* main nav */
nav#main {
    height: 40px;
    background: #fff;
    -webkit-box-shadow:  0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    box-shadow:  0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    z-index: 2;
    position: relative;
}
nav#main ul li {
    float: left;
    position: relative;
    display: block;
    height: 28px;
    padding: 12px 20px 0;
    font-size: 0.8em;
    background: url( img/nav-pipe.gif ) no-repeat right bottom;
}
nav#main li:first-child {
    padding-left: 0px;
}
nav#main a {
    color: #6c6c6c;
    font-weight: bold;
}
nav#main a:hover,
nav#main li.active-menu-item a {
    color: #efa933;
}
/* dropdowns */
nav#main li:hover ul.sub-menu {
    display: block;
}
nav#main ul.sub-menu {
    position: absolute;
    left: 0px;
    top: 40px;
    background: #fff;
    padding: 10px 10px 0;
    -webkit-border-radius: 0px 0px 5px 5px;
    border-radius: 0px 0px 5px 5px;
    -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    z-index: 1;
}
nav#main ul.sub-menu li {
    float: none;
    background: none;
    width: 140px;
    padding: 0px;
}

【问题讨论】:

标签: css z-index


【解决方案1】:

将子菜单的 z-index 设置为 -1,然后为根 UL 设置 z-index:

http://jsfiddle.net/XwrZ6/2/

<nav id="main">
    <div class="mw">
        <div class="menu-main-menu-container">
            <ul id="root-menu">
                <li><a href="#">Item 1</a></li>
                <li><a href="#">Item 2</a></li>
                <li><a href="#">Item 3</a></li>
                <li><a href="#">Item 4</a>
                    <ul class="sub-menu">
                        <li><a href="#">Sub 1</a></li>
                        <li><a href="#">Sub 2</a></li>
                        <li><a href="#">Sub 3</a></li>
                        <li><a href="#">Sub 4</a></li>
                    </ul>
                </li>
           </ul>
        </div>                  
    </div>
</nav>

nav#main {
    height: 40px;
    background: #fff;
    -webkit-box-shadow:  0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    box-shadow:  0px 0px 10px 0px rgba(0, 0, 0, 0.2);   
    position: relative;
}
#root-menu {
    z-index: 999;
}

nav#main ul.sub-menu {
    position: absolute;
    left: 0px;
    top: 40px;
    background: #fff;
    padding: 10px 10px 0;
    -webkit-border-radius: 0px 0px 5px 5px;
    border-radius: 0px 0px 5px 5px;
    -webkit-box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    box-shadow: 0px 0px 10px 0px rgba(0, 0, 0, 0.2);
    z-index: -1;
}

【讨论】:

    【解决方案2】:

    这并不适用于所有解决方案。

    为了您的兴趣,我的解决方法是添加一个 :before 元素。喜欢:

    .menu > li > .sub-menu:before {
      box-shadow:3px 3px 5px rgba(0,0,0,0.5);
      content:' ';
      display:block;
      height:100;
      left:100%;
      margin-left:-5px;
      position:absolute;
      width:5px;
      z-index:0;
    }
    

    【讨论】:

      猜你喜欢
      • 2015-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      相关资源
      最近更新 更多