被遮挡的绝对定位
justin Posted in Web Developer at 11月 26, 2007 |

<div class=”A” style=”position:relative;”>A (relative)
<div class=”logo” style=”position:absolute;z-index:99999;“></div>
</div>
<div class=”B” style=”position:relative;”>B (relative)</div>
最近做minisite项目时,碰到了个奇怪的定位问题: 以上的A,B两个盒子是相对定位,
标牌logo是A的子级,基于A做绝对定位
问题描述:我们希望标牌logo显示在最上面,但在IE下logo标牌部分被B区域遮住,B在最上层显示,调整logo的z-index的数值调整无效,firefox下显示正常。
解决方案:先了解一下所涉及到的几个定位特性(非官方解释):
1. 相对定位元素默认的z-index的数值是0。
2. 当两个相对定位同时出现时,代码靠后的z-index优先。
3. 子级遵循父级设定的z-index;如果子级设定了绝对定位、z-index,可以冲破父级显示
这个问题主要是ie对上面第3条错误解释导致的—在ie下子级的z-index不能冲破父级。网上解决这个bug的办法一般用hack使B为负值,来降低 B 在IE下级别,这种方法绕了一个大圈:z-index为负值时,产生了新的ie bug。
按照定位的特性,ie的这个bug是可以回避的,从表面上看 B 遮住了logo,实际上是 B 遮住了logo的父级 A ,只要将 A 的z-index设定大于B即可。

<div class=”A” style=”position:relative;z-index:1;“>A (relative)
<div class=”logo” style=”position:absolute;”></div>
</div>
<div class=”B” style=”position:relative;”>B (relative)</div>

6 Responses to “被遮挡的绝对定位”
顶一下,以前一直被这个问题困扰。
我的做法是把absolute干脆附属到body上,再用JS定位过去。有点绕了
By justin on Nov 26, 2007
谢谢。呵呵。做一个项目的时候遇到同类问题。。。之前也是设置z-index:-1
但是出现了新的IE bug。。。
呵呵。博客写得比错。多交流
By dreamcog on Dec 3, 2007
我在纳闷,minisite顶上这块东西不是我写的结构和css么,当时我好像解决这问题了的吧?还是后来你又改了出问题了?
By evan on Dec 20, 2007
也曾遇到过这个问题,最后也是同样的解决方法,呵呵
By 原始 on Jan 14, 2008
写的挺明白的
By amy on Mar 31, 2008
5key您在阿里?
By idwalker on Sep 22, 2008