2011-03-21 92 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

相關問題