CSS和z-index:列表中父元素下的子元素

时间:2015-01-16 19:42:33

标签: css list menu z-index

我正在为网上商店制作布局,并且遇到了一个看似非常具体的问题。

有一个下拉导航,其设计看起来像是一个带有框的框。关键是,选项卡(第一级菜单项)和盒子(第二级项目)之间有一条1px的边界线,我无法隐藏。

我考虑过为第二级盒子提供比第一级元素更低的z-index,但这并没有改变任何东西。我读了很多关于z-index,它是如何工作以及它是如何工作的,但没有关于一个列表中的z-index。

它应该是这样的,它的外观如何:http://i.stack.imgur.com/xbQ6x.png

我创建了一个codepen,在将第一级项目悬停时显示问题非常好:http://codepen.io/anon/pen/bNqJxN

li .dropdown{
            overflow: hidden;
            position: relative;
            display: inline;
            visibility: hidden;
            position: absolute;
            padding:0;
            margin: 0 0 0 -1px; /*Putting a negativ margin-top here puts the box OVER the parent element :-( */
            background: #fff;
            border: 1px solid $light-grey;
            width: 280px;
            height: 200px;
            &.right {
                right: -1px;
                left: auto;
            }
            .dropdown-1-2 {
                float: left;
                width: 50%;
            }
        }

3 个答案:

答案 0 :(得分:1)

我通常用z-index解决这个问题,让li的底部与下拉列表的顶部重叠。

在你的情况下,我必须删除z-index的*选择器,它在li和dropdown之后,在该导航中的所有内容上将z-index重置为2。相反,我创建了一个堆叠上下文(here's an article on it),第一个导航显示在第二个上方,然后我给了ul位置相对和下拉z-index为-1和-1px上边距移动它就在未定位的李的背后。

#mainnav {
    ...

    ul {
        @include reduced-list;
        ...
        position: relative;

        li .dropdown{
            ...
            margin: -1px 0 0 -1px;
            z-index: -1;

            ...

        &#nav1 {
            z-index: 2;
        }
        &#nav2 {
            z-index: 1;
        }

抱歉,codepen没有保存。

答案 1 :(得分:0)

你可以解决它添加一个伪元素来覆盖边框

li:hover:after {
    content: "";
    position: absolute;
    width: 100%;
    height: 2px;
    background-color: white;
    bottom: -1px;
    left: 0px;
    z-index: 999;
  }

codepen

答案 2 :(得分:0)

非常感谢!

这两个答案都像魅力一样解决了我的问题!

我在这里使用解决方案创建了一个codepen:http://codepen.io/anon/pen/NPpQOq

ul {
        @include reduced-list;
        position: relative; /* YEAH */
        float:right;
        li .dropdown{
            overflow: hidden;
            position: relative;
            display: inline;
            visibility: hidden;
            position: absolute;
            padding:0;
            margin: -1px 0 0 -1px; /* YEAH */
            z-index: -1; /* YEAH */
            background: #fff;
            border: 1px solid $light-grey;
            width: 280px;
            height: 200px;
            &.right {
                right: -1px;
                left: auto;
            }
        }

将嵌套子项置于父元素下似乎是可能的: - )