zoukankan      html  css  js  c++  java
  • 关于定位和z-index的一些小经历

    今天在工作过程中,遇到这么一个奇葩问题,搞了好一阵子才找到原因,遂总结了一下...

    先上DEMO:

    <div style="800px; height:400px;">
      <div style="380px; height:400px; float:left;">
        <div id="a1" style=" position:relative; z-index:1;">
          <div style="position:absolute;">
            <div style="400px; height:200px; position:absolute; background:#F00; left:100px; top:50px;"></div>
          </div>
        </div>
      </div>
      <div style="380px; height:400px; float:right;">
        <div id="a2" style=" position:relative; z-index:1;">
          <div style="position:absolute;">
            <div style="400px; height:200px; position:absolute; background:#0F0; left:-100px; top:100px;"></div>
          </div>
        </div>
      </div>
    </div>
    <input type="button" value="click" onclick="document.getElementById('a1').style.zIndex=3" /> 

    当你用IE7执行此段代码

    ( IE6暂未确认是否会出此问题,不过推断也会有这问题,毕竟这两浏览器就是一对奇葩... )

    你会发现,不管怎么点按钮,红色层死活不肯跑到绿色层上面...

    而在其他浏览器不会,唯独IE的奇葩兄弟会这样

    但是...如果你用CSS直接定义一个z-index:3给a1,红框又能盖住绿框了...

    并且用页面加载事件( 如jquery的$(document).ready(function(){...}) )来触发JS,修改a1的z-index也是可以实现红框盖住绿框...

    也就是说,唯独像点击,鼠标经过这样的时间所触发执行的JS是无效果的...

    此时此刻...无比郁闷了吧...

    解决方法是:

    将a1和a2的父级元素都设为相对定位( position:relative )

    然后修改按钮onclick事件触发的JS,让其功能变为如下...

    修改a1父级元素的z-index,使a1的父级元素的z-index值大于a2的父级元素的z-index值

    这样就正常了

     

    总结:

    IE6 和 IE7 下,两个相对定位元素,如果他们的上一级父级元素( 注意,是最亲的一级 )不是同一元素。

    其z-index值通过页面加载事件以外的其他事件来执行JS进行修改,均无效果。

    而直接定义CSS,或通过ready事件来执行JS进行修改,则有效果。

  • 相关阅读:
    礼物的最大价值
    复杂链表的复制
    全排列(回溯法)
    删除排序数组中的重复项
    三角形最小路径和(经典dp)
    链表中倒数第k个节点
    造成segment fault,产生core dump的可能原因
    wmpnetwk.exe怎么禁启动
    GSM/GPRS/EDGE/WCDMA/HSDPA/HSUPA--辨析
    OSI七层参考模型每一层都有哪些协议
  • 原文地址:https://www.cnblogs.com/czf-zone/p/3202320.html
Copyright © 2011-2022 走看看