我有一个具备默认定位的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>
元素是惟一的堆叠上下文,但任何元素均可以是堆叠上下文的根元素,请参阅上面的规则)