今天在项目中遇到一个很奇怪的问题,一个a标签的点击事件在IE11中无法响应,在chrome中却可以响应。后来经过仔细的排查问题,发现是IE11下的z-index为负出现的bug,现做如下总结。
情景模拟
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{margin:0;padding:0;}
.inner-1{
position: absolute;
height: 400px;
left:20px;
top: 0;
background-color: red;
z-index: -1;
}
.inner-2{
margin-top: 200px;
height: 100px;
background-color: green;
overflow: hidden;
position: relative;
z-index: 2;
}
</style>
</head>
<body>
<div class="inner-1">
<button onclick="alert(3)">测试</button>
</div>
<div class="inner-2"></div>
</body>
</html>
界面效果如下
在chrome下,点击这个按钮,会弹出3,但是在IE11下,神奇的事情发生了,按钮根本不能点击,将鼠标放上去,没有按钮移入的默认样式,更不会触发点击事件了。给人感觉就像是这里没有按钮,事件无法穿透到这个按钮。
然后我猜测,这个应该是因为这个inner-1层的z-index为负值,致使其表现的就像有东西覆盖在其表面,使其无法获取鼠标移入的焦点。但是在IETester的测试结果中,IE8和IE9这个按钮点击时都有默认的效果,拥有明显的点击效果。因此,这就是一个IE11的专属bug。之后自己尝试将inner-1的z-index设置为1,再进行测试,结果豁然开朗!!!成功了,点击事件可以响应了。
所以,最后的总结就是:在IE11中,不要在z-index为负值的DOM元素中,期待点击事件或者其他鼠标相关事件的发生!!!