2011-03-21 94 views

回答

2

当你涉及到HTML时,你只需要将它放在内部元素之外。 这里是您的解决方案:http://jsfiddle.net/nwekR/23/

<div id="container"> 
    Outer Div 
</div> 
<div id="inner">Inner Div</div> 
+0

这可行,但你已经失去了“元素的分组”。你会如何添加一个样式[像这样](http://jsfiddle.net/nwekR/25/)? *(根据我的回答)* – thirtydot 2011-03-21 05:17:20

+0

我不明白这个问题。你需要添加什么风格?并进入哪个版本? – 2011-03-21 05:23:48

+0

首先:我不是问这个问题的人。其次,这仅仅是你用你的答案不能做的一个例子。当我说你已经“失去了”元素的分组“,我的意思是你不能(例如!)在容器div中加上'width:50%'并且期望内部div的行为与你一样' d期望。 ['width:50%'your answer](http://jsfiddle.net/nwekR/27/)vs ['width:50%'my answer](http://jsfiddle.net/nwekR/28/)。 – thirtydot 2011-03-21 05:27:14

0

这是不可能的(在它的内部是一个容器的孩子的当前状态),因为当浏览器呈现DOM时,它从DOM树上自上而下,并且没有办法在已经被绘制(即在孩子之前绘制父母)。

你可以阅读更多关于Z指数here

然而,有些方法可以实现(通过改变html),但是,您可以看到thirtydot的解决方案。

+0

如果你的意思是“这是不可能的* [没有改变HTML] *”,那么你是对的。否则,请参阅我的答案。 – thirtydot 2011-03-21 05:15:59

+0

不,他是非常正确的:问题是“在其容器下面渲染一个元素”。这是不可能的。你(如你所述)被迫改变元素之间的关系,将#inner放在#container下面。 – 2014-12-12 16:27:26

+0

“它从DOM树上的顶部向下”是通过反对不精确的:DOM元素不只是从上到下绘制:兄弟姐妹按照他们的Z-索引的顺序绘制(并且按照从上到下的顺序if z-index是相等的)。 (但它只适用于*兄弟姐妹* - 因此不会改变与问题相关的任何内容)。 – 2014-12-12 16:43:11

0
#container { 
    background: yellow; 
    position: relative; 
    height: 100px; 
    -moz-box-shadow: 0 2px 6px rgba(0,0,0,0.6); 
    -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.6); 
    box-shadow: 0 2px 6px rgba(0,0,0,0.6); 
    z-index: 6; 
} 
#inner { 
    background: orange; 
    position: absolute; 
    z-index: 4; 
    width: 100px; 
    height: 50px; 
    top: 180px; 
    right: 0; 
    padding-top: 20px; 
} 
+0

你试过这个吗?这看起来不正确。 – thirtydot 2011-03-21 05:14:57

+0

我想我下面不明白。不仅仅是把位置提高到最高位置? – s84 2011-03-21 05:44:44

+0

我认为他的意思是在下面,如下面的“z-index”风格,而不是下面的“垂直向下”。 – thirtydot 2011-03-21 05:46:49

1

最简洁的解决方案是增加一个额外的包装元素,并移动#inner#container

额外的包装元素给出position: relative,所以其他一切应该与以前相同,除了#inner#container之下。

Live Demo

4

的CSS 2.1规范指出这个标准画元素:

  1. 背景和 元件形成层叠 上下文的边界。
  2. 孩子堆叠上下文与 负堆栈水平(最负 第一次)。
  3. 非流水线,非流水线, 非定位后裔。
  4. 浮动后裔。
  5. 流入内嵌级 未定位后裔 包括内联表和内联 块。
  6. 子级堆栈上下文与 堆栈级别0,以及定位 后代'z-index:auto'。
  7. 孩子堆叠上下文 积极的堆栈级别(至少 积极的第一)。

鉴于这些规则和你的HTML,#container是元素#inner,这意味着#container必须首先呈现在创建堆叠上下文。

其他人已经张贴替代HTML/CSS得到你所​​期望的效果,但如果你想知道更多关于为什么你想要什么是不可能的,这里是文档:

http://www.w3.org/TR/CSS21/visuren.html#layers

相关问题