我有一個具備默認定位的div
(即position:static
)和一個具備fixed
位置的div
。 css
若是我設置元素的z索引,彷佛不可能使固定元素落後於靜態元素。 html
#over { width: 600px; z-index: 10; } #under { position: fixed; top: 5px; width: 420px; left: 20px; border: 1px solid; height: 10%; background: #fff; z-index: 1; }
<!DOCTYPE html> <html> <body> <div id="over"> Hello Hello HelloHelloHelloHelloHello Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello </div> <div id="under"> </div> </body> </html>
或者在這裏的jsfiddle: http : //jsfiddle.net/mhFxf/ web
我能夠經過在靜態元素上使用position:absolute
來解決這個問題,可是有人能告訴我爲何會發生這種狀況嗎? ide
(彷佛有一個相似的問題,這個問題,( 固定位置打破了z-index )但它沒有一個使人滿意的答案,所以我在這裏用個人示例代碼問這個問題) spa
給#under
一個負z-index
,例如-1
.net
發生這種狀況是由於在position: static;
忽略了z-index
屬性position: static;
,剛好是默認值; 因此在你編寫的CSS代碼中,不管你在#over
設置#over
, z-index
對於兩個元素都是1
。 pwa
經過給#under
一個負值,它將落後於任何z-index: 1;
元素,即#over
。 code
當元素位於正常流動以外時,它們能夠與其餘元素重疊。 htm
根據http://web.archive.org/web/20130501103219/http://w3schools.com/css/css_positioning.asp上的重疊元素部分 排序
CSS規範中定義的固定元素(和絕對元素)的行爲:
它們在從文檔中分離時表現,並放置在最近的固定/絕對定位父級中。 (不是逐字逐句)
這使得zindex計算有點複雜,我經過在body元素中動態建立一個容器並移動全部這些元素(在body-level元素中被分類爲「my-fixed-ones」)解決了個人問題(相同的狀況) )
我正在創建一個導航菜單。 我有overflow: hidden
在導航器的css中,隱藏了一切。 我認爲這是一個z-index問題,但實際上我隱藏了導航以外的全部內容。
這個問題能夠經過多種方式解決,但實際上,瞭解堆疊規則可讓您找到最適合您的答案。
<html>
元素是您惟一的堆疊上下文,所以只需遵循堆疊上下文中的堆疊規則,您將看到元素按此順序堆疊
- 堆疊上下文的根元素(本例中爲
<html>
元素)- 具備負z-index值的定位元素(及其子元素)(較高值堆疊在較低值的前面;具備相同值的元素根據HTML中的外觀堆疊)
- 非定位元素(按HTML中的外觀排序)
- z-index值爲auto的定位元素(及其子元素)(按HTML中的外觀排序)
- 具備正z-index值的定位元素(及其子元素)(較高值堆疊在較低值的前面;具備相同值的元素根據HTML中的外觀堆疊)
因此你能夠
#under
-ve z-index出如今非定位的#over
元素後面 #over
以relative
使第5條適用於它 在嘗試更改元素的堆疊順序以前,開發人員應該瞭解如下內容。
<html>
元素是根元素,是第一個堆疊上下文 <html>
元素) 元素的順序:
<html>
元素是惟一的堆疊上下文,但任何元素均可以是堆疊上下文的根元素,請參閱上面的規則)