解决ActiveX插件Z-Index属性无效问题

摘要:

在Web开发中我们经常通过z-index设置多个元素之间的层叠关系,这种方式在多数情况下很有效,但是如果遇到有窗体元素时这种方式常常显得无能为力,今天我们就一块看一下如何有效的解决这个问题。

内容:

网页控件分为两大类:有窗体元素和无窗体元素。无窗体元素包括大多数html元素(例如div、table等)、无窗体的ActivX插件、iframe等;有窗体的元素包括<Object>元素、ActiveX插件、Plug-ins插件、Select元素等。所有的有窗体元素都会出现在无窗体元素之上,而有窗体元素和无窗体元素自身遵循z-index属性约束(注意使用z-index必须设置相应元素的position为absolute)。所有的无窗体元素都被浏览器渲染在同一个MSHTML平面,而有窗体元素被渲染在一个单独的MSHTML平面上。在同一个MSHTML平面当然可以通过设置z-index属性设置其层叠关系,但是对于不同平面上的元素,这个属性却无能为力。这里需要注意ActiveX插件,默认情况下VB和MFC控件是有窗体的,而ALT是无窗体的。

虽然上面说到ifame属于无窗体元素,但是在ie中它却横跨两边。无论是有窗体元素还是无窗体元素在显示时都会考虑iframe的顺序。因此如果要解决无窗体元素和有窗体元素之间的层叠关系时我们可以借助于iframe:通过把有窗体元素放到iframe中,然后设置iframe的z-index大于无窗体元素来解决二者层叠关系无法调整的问题;或者在无窗体元素内部放置一个iframe,设置其z-index小于无窗体元素并且其大小同无窗体元素相同;当然如果你觉得这两种方式都太麻烦的话可以使用jQuery的bgiframe插件,它的原理同第二种方式,不过使用起来就简单多了。

上面的方式或许可以解决大多数情况,但是实际应用中或多或少会给你造成一些额外的开发成本,如果你的项目中使用的Ext来进行前台开发,那么很幸运,Ext原生就对遮盖有窗体元素进行了支持。只需要在脚本开始处加上Ext.useShims=true;即可。

另外:多数情况下div被flash遮盖不用像上面这么麻烦,只需要设置wmode属性为transparent即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CSS 定位 CSS有三种基本的定位机制:普通流,浮动,绝对定位(absolute, fixed):普通流是默认定...
    _空空阅读 5,798评论 0 15
  • 1.z-index基础 z-index属性指定了元素及其子元素的[z顺序],而[z顺序]可以决定当元素发生覆盖的时...
    徐国军_plus阅读 6,420评论 1 6
  • 1.z-index简介 (1) 概念 z-index属性指定了元素与元素之间的z轴上的顺序,而z轴决定元素之间发生...
    Bennt阅读 24,045评论 2 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,890评论 18 139
  • 予慧阅读 221评论 0 0