如题,在ie7下示例项目中鼠标划过的时候,li左偏移,并不是静止不动。不符合逻辑啊,虽然知道是li的z-index导致的,去掉就行了,或者将transform换成margin-top也行,可以避免此情况,但是问题产生的根源是什么呢?用现有的W3c标准解释不通呢?如果说是li:hover下具有transform属性的元素z-index层级比兄弟节点定义的z-index要大,导致元素上浮,左边距失效的话,不符合逻辑啊。将translate3d(0,-10px,0);换成margin-top不会出现此情况,但是tranform怎么会在ie下有效
效果图如下:
代码如下:
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<style type="text/css">
*{
margin:0;
padding:0;
}
.prize-list {
width: 1300px;
margin: 0 auto;
clear: both;
padding-top: 30px;
}
.prize-list ul {
height: 320px;
position: relative;
list-style: none;
}
.prize-list li {
position: relative;
float: left;
width: 286px;
height: 320px;
margin-left: 15px;
background: #fff;
z-index: 1;
-webkit-transition: all .15s linear;
transition: all .15s linear;
background: #1c5297;
border: 1px solid #f00;
}
.prize-list li:hover {
z-index: 2;
-webkit-transform: translate3d(0, -10px, 0);
-ms-transform: translate3d(0, -10px, 0);
transform: translate3d(0, -10px, 0);
}
</style>
</head>
<body>
<div class="prize-list">
<ul class="clfix">
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
</div>
</body>
</html>
把你的demo精简了一下,不算答案,但是贴评论太多了。
我没用hover做测试,而是js动态改变元素的z-index(不等于原有的z-index就行)。会发现一个现象,margin-left失效(只是左右失效了,上下并没有)。
然后将元素的
relative
和float:left
去掉一个现象就消失了。absolute
没观察到也可能是我改的不对。大概就是左右浮动和relative定位在改变
z-index
时会有布局冲突?补充:
transform
并没有生效;生活这么美好干嘛研究ie7呢。