ie中绝对定位后的bug

前几天在写一个项目《淘宝全屏海报代码生成器(网页版)》时发现一个很严重的问题,是什么问题呢?a标签绝对定位后在ie下会发生无法点击的现象!

由于该项目中有一个功能是“一图多链接”功能,正常情况下都是用热点来完成。但洒家是极不习惯用热点,于是便用a标签替代热点,最终的功能当然是一样的了。(注:这里的功能指画矩形的功能,并非不规则图形。)用a标签的话当然是需要绝对定位了,但是当洒家在生成代码后在ie下测试时发现一个很奇怪的现象,a标签奇迹般的消失了,这不科学啊!洒家利用jq来获取到a标签的大小,以及具体的位置,但鼠标滑过时却丝毫无反应。如果说找不到位置的话,但jq取值表明位置是正确的,为了更好的判断位置,洒家对其加了边框,这下该一目了然了吧。当洒家给其加上边框后,终于可以看到其位置了,但滑过时依旧无反应,只有当滑过边框时才会显示小手图标。洒家好像明白了什么,于是给其加上背景色,尼玛,坑爹!这小手完全显示了!如下图:

洒家开始猜测:当a标签内部有真实内容时方可正常被点击。经过一番测试折腾后,于是找到了以下几种方法。

方法一:不要使用“absolute”绝对定位,(若使用相对定位,负值时也会无法被选中!如下图:

当然有时我们还是要必须用到“absolute”绝对定位,这个并不是最好的方法

方法二:添加背景色,如果实际情况下是透明的时候可以使用opacity滤镜使其透明,具体写法:

1 filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);/*ie,兼容淘宝店铺的唯一写法!*/
2 opacity:0/*非ie*/

方法三:添加背景图片,如果实际情况下是透明的时候可以使用opacity滤镜使其透明,详细写法同上。

方法四:使用background:url(about:blank),ie6下悬浮时页面闪动也是用这种方法解决的。(推荐)

方法五:巧妙利用边框属性,如:

1 border-left:200px dashed transparent;/*dashed 是为了兼容ie6下透明背景*/
2 width:0

由于a标签默认是内联元素,洒家联想到其它内联元素可能也存在此问题,于是开始测试span,em起来了。由于ie下是支持“cursor:pointer”的,于是便以此属性来验证结果是最好不过的了。结果在意料之中:这些内联元素在ie下绝对定位后真的无法被选中!最后发现即使是像div这样的块级元素也存在此问题!解决方法依旧可以使用上面介绍的几种方法,最后附上述几种解决方法的源码供亲们测试:

 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5 <title>ie下内联元素绝对定位后的bug--艺灵设计,qq群:231749938</title>
 6 <meta name="author" content="艺灵设计,[email protected],[email protected], www.yilingsj.com">
 7 <meta name="keywords" content="ie下内联元素绝对定位后无法点击,a标签绝对定位后被遮挡无法点击,内联元素绝对定位后的bug,ie bug,background:url(about:blank)">
 8 <style type="text/css">
 9 *{ margin:0; padding:0;}
10 a,span,em,i,b,strong{position:absolute;z-index:111;border:0;display:block;width:200px;height:100px;cursor:pointer;border:2px solid #f00;word-break:break-word;white-space:normal;}
11 </style>
12 </head>
13 <body>
14 <div style="height:592px;text-align:center">
15 <img src="http://img02.taobaocdn.com/imgextra/i2/1756178567/TB2f0e.XVXXXXXZXXXXXXXXXXXX_!!1756178567.jpg" style="width:1920px;height:592px;" border="0" title="ie下内联元素绝对定位后的bug背景图片">
16 <a href="http://www.yilingsj.com/code/" target="_blank" style=" position:relative; float:left;left:10px;top:-50px;border:2px solid #f00">a; position:relative;top:<br />-50px;</a>
17 <a href="http://www.yilingsj.com/code/" target="_blank" style="top:10px;left:220px;background-color:#f00;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2">a; background-color:#f00;</a>
18 <a href="http://www.yilingsj.com/" target="_blank" style="top:10px;left:430px;background:url(http://img02.taobaocdn.com/imgextra/i2/1756178567/TB2f0e.XVXXXXXZXXXXXXXXXXXX_!!1756178567.jpg);filter:progid:DXImageTransform.Microsoft.Alpha(opacity=20);opacity:.2">a; 背景图片</a>
19 <a href="http://www.yilingsj.com/code/" target="_blank" style="top:120px;left:10px;background:url(about:blank);">a; background:url(about:blank);</a>
20 <a href="http://www.yilingsj.com/code/" target="_blank" style="top:120px;left:220px;border:0;border-left:200px dashed transparent;width:0;">a; </a>
21 <strong style="top:120px;left:430px;background:url(about:blank);">strong</strong>
22 <span style="top:230px;left:10px;background:url(about:blank);">span</span>
23 <em style="top:230px;left:220px;background:url(about:blank);">em</em>
24 <i style="top:230px;left:430px;background:url(about:blank);">i</i>
25 <b style="top:10px;left:10px;background:url(about:blank);">b</b>
26 <div style="top: 340px;left: 10px; position:absolute; z-index:666;width:200px;height:100px;cursor:pointer;border:2px solid #f00;">div</div>
27 </div>
28 </body>
29 </html>

原文首发地址:http://www.yilingsj.com/div/2014-07-22/177.html

ie中绝对定位后的bug

时间: 2024-11-14 12:29:27

ie中绝对定位后的bug的相关文章

二叉树的先序-中序-后序遍历(一)-循环----绝对白痴好记的方法

接着上一篇 二叉树的先序-中序-后序遍历(一)-递归 的讲,这篇该循环遍历了. 之前一直没有找到好的方法来循环遍历树,以前我老认为有些递归的能做的东西很难换成循环实现. 后来看了一些别人写的代码,然后又问了朋友,才发现...哦,原来这样的啊,我可以自己弄个栈来维护一下. 想到了可以弄个栈以后,至少在我认为,把递归转成循环已经是可行的了,至于怎么实现,这几天在想(因为太笨,看人家的代码总看一半就不想看),今天找到了一个好用的方法,在这里分享一下. 算法的核心是:你看二叉树的时候心里怎么想的,程序就

开发中容易引入的BUG

以自己在开发引入的BUG为例 1.对一个列表中的元素用,来分隔: public static String splitListByComma(List<String> dogs) { StringBuilder stringBuilder = new StringBuilder(); for (String dogName : dogs) { stringBuilder.append(dogName).append(","); } return stringBuilder.

[小技巧]DIV绝对定位后,只水平居中显示

DIV绝对定位后,如何水平居中显示在浏览器中? ? 1 .div { width:1000px; position:absolute; left:50%; margin-left:-500px; } 关键在于margin-left:-500px的值是根据div 的宽度决定,取其宽度的一半. 注:主要用于 新手引导 功能.

input中空格后的数据不显示

bug,input中空格后的数据不显示     昨天在修bug,有一个bug是用户修改的个人信息的地址栏,输入有空格的话,空格后面的内容存不上,而且没有报错,奇怪了,只好跟踪下. 页面上的输入框就是个input,后台取出数据赋给value. <input  id="pr_title2"  onblur=(validateXml(this));   name="pr_title2" type="text" class="srk&qu

mvc中razor的一个bug

具体东西就不多说了,所有编译,代码都是木有问题的. 结果预览页面的时候竟然告诉我编译错误,尼玛这不科学啊. 来看看错误页面 看着问题大概应该是缺少} ,或者多了个} 倒置的编译错误才对,但是编译生成完全没有问题啊,没办法,既然报这个问题,那肯定是最终合并生成的代码文件存在bug 那到底是哪里出的问题呢,没办法,硬着头皮查吧. 1.显示试着调试运行了一下页面,发现后台完全没问题.return view() 后,就出现了黄页. 那问题应该就是在html页面中了,那就来看看html页面中有些什么吧.

centos7(redhat7) 中localtime_r有一个BUG

centos7(redhat7) 中localtime_r有一个BUG.具体过程如下:step1 后台进程启动.step2 用户修改时区.step3 后进进程在使用localtime_r取时间时,不会更新时区.取得时间还是旧的时间.但是localtime使用新的时区计算时间.step4 此时再使用localtime调用后,localtime_r才使用新时区,计算时间.PS, centos6无此问题. BUG 2 centos7.5,进程使用gettimeofday (&tv,&tz);不会

算法实验-二叉树的创建和前序-中序-后序-层次 遍历

对于二叉树的创建我是利用先序遍历的序列进行创建 能够对于树节点的内容我定义为char型变量 '0'为空,即此处的节点不存在 头文件 Tree.h //链式二叉树的头文件 #pragma once #include<iostream> #include<queue> using namespace std; class BinaryTreeNode { public: char data; BinaryTreeNode *leftChild,*rightChild; BinaryTr

先序+中序和中序+后序建树

思路:先序的第一个元素和后序的最后一个元素是当前子树的根,然后遍历中序序列,找到左右子树的分界线,递归建左子树和右子树. class Solution { public: /*由于是oj,这里假设给的序列是合法的,正常情况是需要判断不合法情况的 */ TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder,int instart,int inend,int poststart,int post

紫书p155 用中序后序构造二叉树

二叉树各节点权值是不相同的正整数,输入二叉树的中序后序,求到根节点权和最小的叶节点 紫书贼强,递归写的服气,慢慢理解吧 原文是建树之后用dfs搜的,我试着一边建树一边归纳最短路径 #include<bits/stdc++.h> using namespace std; const int maxv = 10010; int in[maxv], post[maxv], lch[maxv], rch[maxv];//中序,后序,左子树,右子树 int n, minnum, minsum; bool