满屏浮动图标被select覆盖解决方法

来源:互联网 发布:ajax获取数据库数据 编辑:程序博客网 时间:2024/06/13 23:58

如题,遇到了此问题,在网上查找对策,找到的是浮动层被select覆盖的解决方案(比如下拉菜单),离我的需要还有那么点距离。不过原理很类似,就是在浮动层div下衬一个同样大小的iframe,因为ifram优先度高于select,故可以解决。

 

这里稍微提一下div、iframe、select层级别问题。因为select是窗口元素,并且无可争议div为非窗口元素,所以当这两个排层次关系的话,select永远在div之上,无论div的z-index设置多高,然而iframe比较特殊,在ie5.5之前是窗口元素,ie5.5及之后为非窗口,但是无论他是什么样的原素,他不仅可以通过z-index,跟select进行层级排序,还可以跟div用z-index进行层级排序。这就出现了一个有意思的问题,如果iframe的z-index最大或最小,那么无可争议,不管div的z-index是否大于select,div在select之下;然而一旦div>iframe>selcect这种情况,那么就会出现div在最上,select在最下。

 

可以网上搜索“ HTML元素的Z-index属性是如何工作的” ,得到更多相关信息。 

 

基于此,因为我的是满屏浮动,所以只要动态获得浮动图标的长宽,相对位置就可以了。

核心代码:

        IfrRef.style.width = DivRef.offsetWidth; // 将图标div层宽度赋给iframe
        IfrRef.style.height = DivRef.offsetHeight; // 将图标div层高度赋给iframe
        IfrRef.style.top = DivRef.style.top; // 相对位置top
        IfrRef.style.left = DivRef.style.left; // 相对位置left
        IfrRef.style.zIndex = DivRef.style.zIndex - 1; // iframe层级别低于div层级别1级
        IfrRef.style.display = "block"; // 显示iframe

 

关于高度、宽度赋值为什么用offsetWidth和offsetHeight,是因为DivRef.style.width(height)为空,笔者认为这原因是因为div没有width和height属性(只能通过css定义),所以取不到。如果这说法不对,请指正。

 

完整演示代码如下:(声明,满屏浮动的代码是抄的)

原创粉丝点击