CSS元素的层叠与z-index设置
|
源代码网整理以下我们在文章的更新中,特别注重对新手的辅导,但webjx.com面对的是广大的开发人员,大家可能会遇到各种各样的问题,有些问题很不常见,或者应用的很少,但我们依然有必要学习更多的CSS布局知识与技术,以应对可能出现的复杂多变的CSS内外形势(挺汗)。今天这篇文章,主要介绍了元素的层叠与z-index设置,希望对您有所帮助,更多的知识,请多多参考webjx.com的教程。 源代码网整理以下声明 源代码网整理以下定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。 源代码网整理以下z-index: 源代码网整理以下用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序 源代码网整理以下理解stacking context 源代码网整理以下每个box都归属于一个stacking context,它是元素在z轴方向上定位的参考。根元素形成 root stacking context,其他stacking context由定位元素设置z-index为非auto时产生。如#div1{position:relative;z-index:0;}即可使 id=div1的元素产生stacking context。stacking context和 containing block 并没有必然联系。 源代码网整理以下理解stack level 源代码网整理以下在一个stacking context中的每个box,都有一个stack level(即层叠级别,以下统一用stack level),它决定着在同一stacking context中每个box在z轴上的显示顺序。同一stacking context中,stack level值大的显示在上,stack level值小的显示在下,同一stack level的遵循后来居上的原则(back-to-front )。不同stacking context中,元素显示顺序以父级的stacking context的stack level来决定显示的先后情况。于自身stack level无关。注意stack level和z-index并不是统一概念。(将在后文慢慢理解) 源代码网整理以下stack level规则 源代码网整理以下每个stacking context中可包含块级(block)元素、内联(行内inline)元素,还有设置float属性的元素、定位元素等等他们在同一父级 stacking context中的显示顺序是怎样的?即stack level是怎样的呢?比如一个块级元素和内联元素发生层叠的话谁会在上面呢?是不是谁在后面谁就在上面呢? 源代码网整理以下根据w3c关于stack level的介绍可以得出以下stack level规则 源代码网整理以下父级stacking context的背景、边界 源代码网整理以下以上stack level在浏览器执行情况: 源代码网整理以下firefox3.0下测试完全吻合,firefox2.0下稍有不同即:“z-index值为负值的定位元素”在“父级stacking context的背景、边界”之前。 源代码网整理以下FF下测试 源代码网整理以下测试页面: 01.html(请分别在FF3.0和FF2.0中打开) 源代码网整理以下代码说明: 源代码网整理以下由前所述,如果元素的stack level同级则后来居上;元素的stack level高,这无论代码在文档中位置如何都显示在上面,即使代码在最前面;如果元素的stack level低,无论代码位置如何都将显示在下面,即使代码在最后面。 源代码网整理以下我们就根据这一点,以“3.文本流中非定位的、block块级子元素”和“4.文本流中非定位的、float浮动子元素”为例,如果我把“float元素” 的代码写在“block元素”的前面,且实际显示为:“float元素”在“block元素”之上。即可证明:"float元素”的stack level级别较“block元素”高。因为如果同级,或者“block元素”的stack level高都应是“block元素”显示在上。 源代码网整理以下根据以上,根据标准中的顺序,把stack level高的元素代码写在前面,stack level低的代码写在后面,如果显示结果是:代码在前面的元素显示在上方 ,即证明上面的stack level规则。 源代码网整理以下测试结果: 源代码网整理以下在FF3.0中结果和标准顺序一致。FF2.0中“z-index值为负值的定位元素”在父级stacking context的背景下面。(注意ff2.0的这个特殊性) 源代码网整理以下IE下测试 源代码网整理以下测试页面: 2.html (请在IE下浏览) 源代码网整理以下代码说明: 源代码网整理以下此代码也是根据上面的测试思想,但由于inline元素在ie中的特殊性,把inline的代码写在了后面,事实证明结论是正确的。对于“block元素”和“float元素”顺序大家可以交换顺序测试。 源代码网整理以下测试结论: 源代码网整理以下IE下(无论ie6.0或者ie7.0)“float元素”和“block元素”属同一stack level,而“inline元素”较其stack level低。 源代码网整理以下解释说明: 源代码网整理以下了“float元素”,“z-index:auto的定位元素”仿佛产生了新的stacking context,但其真正能产生新的stacking context的后代任按其父级stacking context定位。(但IE中“z-index:auto的定位元素” 源代码网整理以下至此stack level规则内容已经完毕,现在应该能理解stack level和z-index的不同。stack level来决定这一个stacking context中各元素在z轴上的显示顺序,对于同一stack level的定位元素才由z-index进一步决定显示次序。 源代码网整理以下一些问题的解释 源代码网整理以下怿飞版主在《z-index在IE中的迷惑》一文中最后提到的问题: 源代码网整理以下演示地址: 3.html 源代码网整理以下认为: 源代码网整理以下解惑:IE浏览器似乎给body元素默认了一个相对定位属性(position: relative)。 源代码网整理以下真是这样吗? 源代码网整理以下演示地址: 4.html 源代码网整理以下分析: 源代码网整理以下box1显示在body的下方,根据上面的stack level规则,IE中,如果body默认了一个位置属性,即body是其父级stacking context,box1应显示在其上方,事实却不是这样。而且当我们给body加上position:relative以后,显示效果和stack level规则一致。所以body并没有默认位置属性。 源代码网整理以下 源代码网整理以下总结: 源代码网整理以下在一个stacking context中元素的z-轴显示顺序,由元素所处的 stack level 决定。对于同一stack level的定位元素由z-index的大小进一步决定显示次序。 |
