89

我有两个嵌套的 CSS 元素。我需要让父元素位于子元素的顶部,即 z 轴上方。仅设置 z-index 是不够的。

我无法在孩子上设置负 z-index,这会将其设置在我实际页面上的页面容器下方。这是唯一的方法吗?

http://jsbin.com/ovafo/edit

.parent {
  position:  relative;
  width: 750px;
  height: 7150px;
  background: red;
  border: solid 1px #000;
  z-index: 1;
}
.child {
  position: absolute;
  background-color: blue;
  z-index: 0;
  color: white;
  top: 0;
}
.wrapper
{
  position: relative;
  background: green;
  z-index: 10;
}
<div class="wrapper">
  <div class="parent">
    parent parent
    <div class="child">
      child child child
    </div>
  </div>
</div>

4

7 回答 7

81

为孩子设置一个负数z-index,并在父级上删除一个。

.parent {
    position: relative;
    width: 350px;
    height: 150px;
    background: red;
    border: solid 1px #000;
}
.parent2 {
    position: relative;
    width: 350px;
    height: 40px;
    background: red;
    border: solid 1px #000;
}
.child {
    position: relative;
    background-color: blue;
    height: 200px;
}
.wrapper {
    position: relative;
    background: green;
    height: 350px;
}
<div class="wrapper">
    <div class="parent">parent 1 parent 1
        <div class="child">child child child</div>
    </div>
    <div class="parent2">parent 2 parent 2
    </div>
</div>

https://jsfiddle.net/uov5h84f/

于 2009-11-27T01:57:50.413 回答
60

幸运的是,存在一个解决方案。您必须为父级添加一个包装器并将此包装器的 z-index 更改为例如 10,并将子级的 z-index 设置为 -1:

.parent {
    position: relative;
    width: 750px;
    height: 7150px;
    background: red;
    border: solid 1px #000;
    z-index: initial;
}

.child {
    position: relative;
    background-color: blue;
    z-index: -1;
    color: white;
}

.wrapper {
    position: relative;
    background: green;
    z-index: 10;
}
<div class="wrapper">
    <div class="parent">parent parent
        <div class="child">child child child</div>
    </div>
</div>

于 2012-04-14T18:39:46.530 回答
9

其中一些答案确实有效,但设置position: absolute;z-index: 10;似乎非常强大只是为了达到所需的效果。我发现以下是所需要的,但不幸的是,我无法进一步减少它。

HTML:

<div class="wrapper">
    <div class="parent">
        <div class="child">
            ...
        </div>
    </div>
</div>

CSS:

.wrapper {
    position: relative;
    z-index: 0;
}

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

我使用这种技术为图像链接实现了带边框的悬停效果。这里还有一些代码,但它使用上面的概念来显示图像顶部的边框。

http://jsfiddle.net/g7nP5/

于 2014-05-15T12:20:33.540 回答
3

由于您的 div 是position:absolute,因此就位置而言,它们并没有真正嵌套。在您的 jsbin 页面上,我将 HTML 中 div 的顺序切换为:

<div class="child"><div class="parent"></div></div>

红色的盒子覆盖了蓝色的盒子,我认为这就是你要找的。

于 2009-11-29T05:04:43.287 回答
3

破解它。基本上,发生的情况是,当您将 z-index 设置为负数时,它实际上会忽略父元素,无论它是否定位,并位于下一个定位元素的后面,在您的情况下是您的主容器。因此,您必须将父元素放在另一个定位的 div 中,而您的子 div 将位于其后面。

解决这个问题对我来说是一个救命稻草,因为我的父元素特别无法定位,以便我的代码工作。

我发现所有这些对于实现此处指示的效果非常有用:仅使用 CSS,在悬停时显示 div <a>

于 2012-08-26T01:48:14.510 回答
3

您需要在父子节点上使用position:relativeor才能使用.position:absolutez-index

于 2009-11-27T18:37:39.883 回答
-13

风格:

.parent{
  overflow:hidden;
  width:100px;
}

.child{
  width:200px;
}

身体:

<div class="parent">
   <div class="child"></div>
</div>
于 2011-10-02T16:35:34.137 回答