IE6兼容性问题 select 遮盖div

ie6下select覆盖div的解决办法 立即下载

在IE中,select属于window类型控件,它会“挡住”所有非window类型控件
可以这么理解,div这样的组件是在浏览器客户区使用代码“渲染”的,
他们被渲染在客户区的绘画表面上,
而select是使用的标准windows控件,只是作为客户区的子控件放置而已,
它会覆盖所有客户区绘画表面上“画”出来的一切,但不一定会覆盖其他类型的window控件,
比如iframe和其他的select,如果你使用过类似Delphi这样的环境就会自然理解。IE7解决了此类BUG。

使用JS做DIV弹出层时,一般地在IE下是无法遮罩ActiveX控件的,同时在IE6下Select也遮罩不住。在IE中ActiveX默认永远显示在最顶层,因此通过设置Style的Z-Index属性也无法改变遮罩关系的。在信息系统软件中,许多场合由于性能、操作等原因,往往会使用ActiveX代替Html来完成功能,从而成为不可回避的问题。

1 var sd = XX.style.display;
2 XX.style.display = "none";
3  ...
4 //关闭弹出层后显示
5 XX.style.display = sd;

  最容易想到的方法是在弹出DIV层前隐藏控件对应的object,关闭层后再显示出来。如果只是当个页面诚然这样简单,但如果存在多个Iframe嵌套的话,对于其他Iframe也存在控件的话就比较麻烦。
  在IE6以后版本存在称之为shim的解决办法,基本思路是这样的,在当前页面动态创建一个iframe,其z-index比当前的要高,则这个iframe会呈现在最上方,然后将弹出的div的z-index设置比这个iframe的要高,此时弹出的div就能遮罩住ActiveX控件了,示意见如下简图(实际div是与iframe重合的)。
shim示意图
  当然还需要设置一些必要地属性,比较关键是设置iframe的src属性为javascript:false;,并设置display为none,透明度为0。

 
01 //popDiv是弹出层,nowindex是当前的z-index
02 popDiv.style.zIndex=nowindex+1;
03 //加一个iframe以遮住ActiveX
04 if($get("__iframeBodyCover" + winname )==null){
05     var iframeBodyCover = document.createElement("iframe");
06         iframeBodyCover.id = "__iframeBodyCover"+winname;
07         iframeBodyCover.style.cssText = "position:absolute;top:0;left:0;width:" + document.body.clientWidth+ "px; height:" + document.body.clientHeight + "px;background-color:#000000;filter:alpha(opacity=0);display:none;";
08         iframeBodyCover.src ="javascript:false;";
09         document.body.appendChild(iframeBodyCover);
10 }
11 //iframe的z-index比div的要低
12 $get("__iframeBodyCover" + winname ).style.zIndex = nowindex;
  当然这时候在IE6下自然也能遮罩住select了,方法还是有一点巧妙地,没有 经验的可能比较难以想到,不过不知道是不是有更好地方法。

转载方案:

有多种种办法;
1. 修改select,不用标准select,而是自己用其他html元素模拟
2. 修改你的div,使用iframe。
3. 在div被显示的时候或者到达select所在位置时隐藏select
4. 在div中或div的同一坐标上,用相同尺寸的iframe先遮挡一下,然后在iframe上显示div的内容。
5.Object对象的优先度较高,可以挡住select框

 

解决方案4   iframe

<html>
<head>
<script>
function DivSetVisible(state)
{
var DivRef = document.getElementById('PopupDiv');
var IfrRef = document.getElementById('DivShim');
if(state)
{
DivRef.style.display = "block";
IfrRef.style.width = DivRef.offsetWidth;
IfrRef.style.height = DivRef.offsetHeight;
IfrRef.style.top = DivRef.style.top;
IfrRef.style.left = DivRef.style.left;
IfrRef.style.zIndex = DivRef.style.zIndex - 1;
IfrRef.style.display = "block";
}
else
{
DivRef.style.display = "none";
IfrRef.style.display = "none";
}
}
</script>
</head>
<body>
<form>
<select>
<option>A Select Box is Born ....</option>
</select>
</form>
<div id="PopupDiv" style="position:absolute; top:25px; left:50px; padding:4px; display:none; background-color:#000000; color:#ffffff; z-index:100">
.... and a DIV can cover it up<br/>through the help of an IFRAME.
</div>
<iframe id="DivShim" src="javascript:false;" scrolling="no" frameborder="0" style="position:absolute; top:0px; left:0px; display:none;">
</iframe>
<br/>
<br/>
<a href="#" οnclick="DivSetVisible(true)">Click to show DIV.</a>
<br/>
<br/>
<a href="#" οnclick="DivSetVisible(false)">Click to hide DIV.</a>
</body>
</html>

转载方案:

先看看IE6下效果:

       IE8下:

 

 

 

                       

 

可见,这是极其难看的,无论层的z-index设到多少亿都是没用的,目前没发现完美的解决方法,都是存在bug的,本人现知道的有2种:

 

1.显示层之前隐藏全部select,此方法影响效率,也影响布局美观。

2.在层里插入一个隐藏iframe,奇怪的是,iframe可以覆盖select,需要设置iframe为浮动,透明度为0,IE6效果:

 

 

 

代码,IE6-8、firefox3.5、safari4、opera9测试下通过:

 

 

Html代码   收藏代码
  1. <html>  
  2.     <head>  
  3.         <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">  
  4.         <title>Untitled Document</title>  
  5.     </head>  
  6.     <body>  
  7.         <div style="position:absolute;background:red;width:100px;height:200px;left:20px;top:20px;">  
  8.             <iframe style="position:absolute;width:100%;height:100%;_filter:alpha(opacity=0);opacity=0;border-style:none;"></iframe>  
  9.             sdfsdfsdf<br>sdfsdfsdf<br>sdfsdfsdf<br>sdfsdfsdf<br>  
  10.         </div>  
  11.         <select><option>sdf</option></select>  
  12.         dfgdfgdfgdfgdfgdfgdfgdfgdfdfgdfgdfgdfgdfgdfgdfgdfgddfgdfgdfgdfgdfgdfgdfgdfgd  
  13.         dfgdfgdfgdfgdfgdfgdfgdfgdf        
  14.     </body>  
  15. </html>

 完。




弹出有遮罩的拖动层,简单模拟select(未做界面) 弹出有半透明遮罩的div层,可拖动。弹出层在窗口自适应居中,简单用div和li模拟下select的效果。 立即下载

相关推荐

IE6下Select元素被div等元素覆盖的解决办法

在页面设计时,经常会使用div制作蒙版或模拟弹出窗口,但在IE6下,当div下方有下拉列表框select元素的时候,下拉列表框会划破div显示在div之上,不论z-index设为何值均会出现此问题,

IE6中select控件遮盖问题

曾经在一个项目中遇到这样的问题,找到了一个解决办法。在遮盖层加入下面的代码:

小志的blog 594

PCL读取点云数据报错:Failed to find match for field ‘x‘/ ‘y‘/ ‘z‘.

原因:使用matlab生成的pcd文件,点云数据是双精度类型,pcl处理的点云数据是单精度类型。解决方案:使用matlab生成的点云坐标单精度化,然后在生成点云加以存储。

little_white138的博客 866

解决 IE6 下 select 的覆盖问题

方法简要说明:用 iframe 来当作 div 的底 比如一个半透明遮罩层下面有 select,在 IE6 下肯定是遮不住 select 这个丑的,这个时候你就可以这么用了,如下: iframe 的样式如下: #lightbox iframe {     position: absolute;     top: 0;     left: 0;     z-index: -

lpbottle的专栏 630

RK3588 Linux启动优化至亚秒级全链路剖析

本文深入探讨RK3588平台Linux系统启动加速技术,涵盖从BL1/ATF安全固件、U-Boot剪裁到内核精简化等全链路优化方案,实现从上电到用户脚本800ms内完成的实战经验。​​文末提供完整解决方案获取方式​​。由于在 ARMv6 之后引入了 TrustZone 模块, 目前市面上 ARMv7 和 ARMv8 之后的系统都会包含了该模块, 这个模块由 BL1 启动, 且在 ATF(ARM Trust Firmware) 固件中, 既安全世界中引导到 BL33 (UBOOT)的系统。

韩若明溪 1777

基于Matlab与Gurobi的园区微电网风光储协同规划:从独立运营到联合优化的建模实战

本文详细介绍了如何利用Matlab与Gurobi进行园区微电网的风光储协同规划建模实战。通过构建从独立运营到联合优化的数学模型,结合Yalmip工具箱,旨在解决源荷不匹配问题,实现储能系统的最优配置与运行,从而降低总供电成本并提升新能源利用率。

weixin_29053073的博客 140

IE6下遮盖select,并解决页面滚动时,select闪烁问题

最近项目采用了jquery作为js库,easyui作为前提ui,但是它的的弹出宽遮罩没有解决IE6下select的穿透div层的问题, 进过讨论,决定采用iframe来覆盖select的方式解决。 用了iframe覆盖解决了传统问题,但是新的问题又出现了,如果页面有滚动条时,页面滚动的时候,被覆盖的select闪烁很厉害,页面停止了,闪烁也停止了,由于我们项目还采用了blockUI...

620

数字IC后端设计实现 | PR工具中到底应该如何控制density和congestion?(ICC2&Innovus)

数字IC后端设计实现中到底应该如何控制cell density和congestion?(ICC2和Innovus两种解决方案)

weixin_37584728的博客 7112

IE6中div不能覆盖select的问题

在ie6下,我们使用select的时候,会发现不管对上层的div的z-index给多大的值,select总是要从下面冒出来。     如下图所示效果,鼠标移动到儿童票购买须知时弹出浮动层,正常情况下,浮动层应该遮住下面的select下拉列表。ff等浏览器中显示正常,如图1所示:     但是在ie6中如图2所示: 解决方法1:用div遮盖iframe 解决方法2:jQuery插

594

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3343

对雷达中相位补偿概念的一些理解

基于多普勒相位补偿的速度扩展方法和DBF测角,两者本质上都是对相位进行补偿。

qq_42235129的博客 4030

IE6下div覆盖select解决方案

在IE6下 弹出的div层无法遮盖DropDownList/select控件,如下方法可行: <!-- function divdis() { var divs = document.getElementById("divdis"); var iffram = document.getElementBy

claymore1114的专栏 6282

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

select网页下拉列表与div层遮盖问题

<br />  第一就是比较有名的:一般div浮层在IE6下无法遮盖select元素的问题。首先提供了下面一个实例:<br /><br /><br /> <br />  注解:如果你在FirFox下和IE7下看都的结果是一样的:浮层A、B、C都可以正常的现实,即遮住下面的select元素。但是在IE6下则是3种不一样的情况,浮层A依然正常;浮层B主体部分遮盖住了select元素,但是浮层的边框却无法遮住select元素;浮层3则完全无法遮盖select元素。造成这个现象的原因是在IE6下,浏览器将selec

601

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【IE6的疯狂之五】div遮盖select的解决方案

IE6以及一下版本下,选择框Select会覆盖Div中的内容一般情况下,可以将显示的内容放到Iframe中,然后再显示框架内的内容。由于Iframe的可以显示在Select上层,就可以解决这个问题。不过这样做在实现上比较麻烦。有个解决的部分就是在Div内容中加入不显示的Iframe框架即可,不用修改其他内容。例如:http://www.css88.com/demo/div_selec...

dgk62408的博客 161

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

解决IE中DIV无法遮盖SELECT的问题

解决IE中DIV无法遮盖SELECT的问题   下拉框,即Html的SELECT元素,.net设计时的DropDownList,是HTML中的windowed  element,尤其ie6之后,几乎是唯一的windowed  element(还有popup等少量极少用的的)。  普通的元素,textbox,  div,  table……这些,属于windowless  element,它

teresa502的专栏 786

解决div层被select下拉框遮盖的问题

在IE里,层DIV被下拉框SELECT遮盖,这是IE的bug之一,原因在于select的优先级别比div高。因此无论如何用css属性z-index设置都没用。所以,解决的办法有两种在显示div的时候隐藏所有select让div里的内容比select的优先级还要高第一种方法显然比较麻烦,特别是当select比较多且位置不固定的时候,很容易将不该隐藏的也隐藏了。第二钟办法更好一些。常用的优先级比sel

URL的专栏 7506

html 下拉 遮罩,select网页下拉列表与div层遮盖问题

select网页下拉列表与div层遮盖问题互联网 发布时间:2009-04-02 20:55:20 作者:佚名 我要评论在html中关于select元素的问题在很多地方都提出过,而在前段时间的项目中,刚好遇到了关于select元素的两个小问题,这里进行一下总结。 第一就是比较有名的:一般div浮层在IE6下无法遮盖select元素的问题。首先提供了下面一个实例: 注解:如果在html...

weixin_39943383的博客 333

IE6 select穿透问题(div 定位无法遮盖select)!

此问题,早有耳闻,但是一直都没有亲身碰到过,也就没有过多的去在意这些问题。 这一回总算是见识到了ie的厉害,虽是在ie选项中大大的写着ie版本是ie11 ,但是有些部分确实走的ie6的内核,怪不得微软天天在各种window update. 解决此问题的方法很简单,给你需要显示的内容的后面加一个iframe,让他去挡住select不要穿透过来,这样世界就算是清净了。 如下html:

杨有梦的博客 3120

解决IE6 select无法被div遮盖的bug

解决ie6 select无法被div遮盖的bug

cychai的专栏 1306

解决DIV层被OBJECT、SELECT控件遮盖问题

浮动层或便捷菜单给用户操作极大的便利。使用IE6、7时,SELECT控件不能被DIV遮盖。OBJECT控件也不能被DIV遮盖。究其原因,大多表单控件或HTML控件是使用浏览器本身渲染绘制,因此层次可以由浏览器自身控制。而SELECT控件是Windows窗口控件,同样可见型ActiveX容器也是使用面向Windows技术开发。它们表现实质仍是相同,都是Windows窗口包含句柄。因此,浏览器不能对其调整层次,浏览器本身与他们都是平级的。尽管IE8中解决了SELECT控件的问题,但OBJECT控件依然没办法改变

shadow_zed的博客 408

jquery ui的autocomplete在ie6下不能遮盖select

我使用的js:jquery-ui-1.10.0.custom.js、jquery.bgiframe.js 问题: ie6下select为窗口级别元素,其他元素无论z-index多高都无法遮盖select...(select是你儿子??) 解决方法: 网上的解决方法有几种: 1.用js隐藏下面的slelect...... 2.使用在ie6下与select同级别的i

ablipan的专栏 2338

IE6下div遮盖select的最优解决方案

a.本节精选html5/css频道里一款IE6下div遮盖select的最优解决方案    原理:利用iframe来遮挡select,再用div来遮挡iframe,就这么简单。        1)首先,建一个div层和iframe层;        2)再设置它们的属性,重要的样式是用z-index来控制iframe和div的显示顺序,z-index的值越大,他会在表层显示。        (注...

weixin_34273481的博客 174

IE下, div无法在select上浮动的问题.

解决方法如下,(来自网络)下拉框,即html的SELECT元素,.net设计时的DropDownList,是html中的windowed element,尤其ie6之后,几乎是唯一的windowed element(还有popup等少量极少用的的)。普通的元素,textbox, div, table……这些,属于windowless element,它们之间互相遮盖的情况由z-index决定,在它

Zeal Vampire真诚的吸血鬼 1915
上一篇: jquery(function(){})与(function(){}(jQuery)的区别
下一篇: socket 、webservices、Json的区别
普通网友
博客等级 码龄15年 4粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值