Chen Yangjian's Blog

Carpe diem - Seize the day

Ie6 Z-index 失效 Bug

| Comments

Web 2.0 的一大特征就是页面不再是平的,我们开始有各种浮层、窗口、提示,骚一点的,还会给页面蒙上一层阴影,半透明的哦。这些浮层通常都很开心地像浮云一般飘在那边,只要它们没有遭遇 ie6。

浮层盖不住页面的原因有很多,其一是 ie6 中,select 控件是以 Window Shell ListBox 和 ComboBox 方式实现的,不支持 z-index、title、zoom 等,层级很高,不与 div、span 为伍,超脱于 z-index 之外自然就是世外高人了。解决方式就是用一个同样牛逼但不会无视 z-index 的 iframe把丫盖掉。公司里不鼓励用 jQuery,这在我看来很是无厘头,可能跟程序员基数有关系,只是未免不够拥抱变化。所以 bgiframe 插件就不好用了。不过不用也好,毕竟为 ie6 添加个 workaround 就得加个 js 请求,有点夸张的。贴一个 YUI3 写的示例。

fixie6.js
1
2
3
4
5
6
7
8
9
10
11
12

function fixie6() {
  var iframe = Y.Node.create('<iframe frameborder="0" src="javascript:false"></iframe>');
  var region = popup.get('region');

  iframe.get("style").cssText = "background:transparent;position:absolute;border:none;top:0;left:0;padding:0;margin:0;z-index:-1;filter:alpha(opacity=0);";
  iframe.setStyles({
      'width': region.width,
      'height': region.height
  });
  popup.appendChild(iframe);
}

另一个 ie6 的浮层 bug,则是 z-index 失效,而该控件明明是支持的。导致这个 bug 的原因有二:浮层或者浮层的子节点被 float 了,其一;父节点有 position: relative; 其二。两个因素都很屎。解决办法相应的就是清除 float;为父节点设 z-index。

Comments