CSS教程:网页布局定位及z-index解释
互联网 发布时间:2008-10-17 19:25:37 作者:佚名
我要评论
声明
定位元素:
position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。
平台:win/IE win/FF
z-index
用来确定定位元素在垂直于显示屏方向(以下称为Z轴)上的层叠顺序
值:auto | 整数 | inherit
默认:auto
适用于:定位元素
继承性
一些问题的解释:
怿飞版主在《z-index在IE中的迷惑》一文中最后提到的问题:
运行代码框
[Ctrl A 全部选择 提示:你可先修改部分代码,再按运行]
演示地址:
http://rong179.blogbus.com/files/12163573190.html
认为:
解惑:IE浏览器似乎给body元素默认了一个相对定位属性(position: relative)。
真是这样吗?
运行代码框
[Ctrl A 全部选择 提示:你可先修改部分代码,再按运行]
演示地址:
http://rong179.blogbus.com/files/12163572440.html
分析
box1显示在body的下方,根据上面的stack level规则,IE中,如果body默认了一个位置属性,即body是其父级stacking context,box1应显示在其上方,事实却不是这样。而且当我们给body加上position:relative以后,显示效果和stack level规则一致。所以body并没有默认位置属性。
那为什么负值的定位元素在IE和FF下显示不一致呢?
ie 中根据stack level规则: z-index为负的定位元素的stack level比父级stacking context(此处是root stacking context)高,显示在其上方。故box1在ie中能显示。ff3.0和标准一致,也能显示。大家可以试一下。
ff2.0 中由于那条特殊的stack level,即 z-index为负的定位元素的stack level比父级stacking context(此处是root stacking context)低,所以显示在root stacking context下方。故不能看见。
另外,上面的代码中加上opacity那条后,在ff2.0中即可显示了。这又是什么原因呢?
推测:在火狐中如果给元素设置opacity属性(1除外),即会产生新的stacking context。
上面加上opacity属性后在ff2.0中可显示box1在body下,ff3.0box1在body上,(可以根据上面的stack level规则自己分析)符合推测。
在w3c的说明中也证明这点
In future levels of CSS, other properties may
introduce stacking contexts, for example 'opacity'
[CSS3COLOR].
总结:
在一个stacking context中元素的z-轴显示顺序,由元素所处的 stack level 决定。对于同一stack level的定位元素由z-index的大小进一步决定显示次序。 ie中给元素设置position属性(static除外)可产生新的stacking context ff中给元素设置opacity属性(1除外)可产生新的stacking context
除此之外(也许设置其他属性也会产生新的stacking context,但还不知道)只有定位元素设置了z-index(auto除外)才会产生新的stacking context,子元素将按照新的stacking context,定位。
在FF3.0中结果和标准顺序一致。FF2.0中“z-index值为负值的定位元素”在父级stacking context的背景下面。(注意ff2.0的这个特殊性)
IE下测试
运行代码框
[Ctrl A 全部选择 提示:你可先修改部分代码,再按运行]
测试页面:
http://rong179.blogbus.com/files/12163574751.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的定位元素”
会拥有z-index值0,产生一个新的stacking context,并影响其子元素定位。这是IE一个BUG)
inline元素在FF中仿佛能产生新的stacking context,而在IE中则不能。
至此stack level规则内容已经完毕,现在应该能理解stack level和z-index的不同。stack level来决定这一个stacking context中各元素在z轴上的显示顺序,对于同一stack level的定位元素才由z-index进一步决定显示次序。
相关文章
- z-index最大值,最小值以及同值时层的高低,做了个测试z-index的最大值,有几个结论如下2009-05-28
- z-index属性简介 引用: z-index : auto | number auto:默认值。 number:无单位的整数值,可为负数。 z-index 值较大的元素将叠加在z-index值较小的元素之上。对2009-05-29
CSS教程:元素层叠级别及z-index-CSS教程-网页制作-网页教学网
原文:http://rong179.blogbus.com/logs/24966909.html 声明 定位元素:position属性值设置除默认值static以外的元素,包括relative,absolute,fixed。 平台:win/I2008-10-17- 设置z-index时必须要固定位置,这样设置它的值时才能奏效(例如 position:absolute;)下面是示例代码,在ff3.5.5和ie5.5~ie8.0RC1中通过,大家可以尝试着不固定其位置试试2009-11-26
- IE6/7对z-index的表现跟IE8及以上浏览器不一致。position值为非static时,如果不设置z-index属性,IE6/7下z-index默认为0,而IE8及以上浏览器z-index为auto,且zindex:auto2012-11-13
- 发现有时候真得多看看书,以前一直纳闷为什么有时候可以,有时候不可以,原来是这个原因.2011-03-23
- 写了个最简单的DEMO,演示了3个DIV互相遮盖的情况。记住:z-index要配合position属性才有效2012-02-25
- 可是真有些日子没有写DIV+CSS了,而且对IE6兼容性的坑碰到的还是不够多(以前做国外项目),所以这次开发中不可避免的碰见了几个问题,尤其是在IE下的 z-index 问题很有意思2013-01-09
CSS元素的层叠与z-index设置-CSS教程-网页制作-网页教学网
我们在文章的更新中,特别注重对新手的辅导,但webjx.com面对的是广大的开发人员,大家可能会遇到各种各样的问题,有些问题很不常见,或者应用的很少,但我们依然有必2008-10-17- 在这篇文章里,我们会准确的说明究竟什么是Z-index,它为什么会这么不为人所了解,并一起讨论一些关于它的实际使用中的问题。我们同时会描述一些会遇到的浏览器间的差异,2014-10-22


最新评论