进一步解析ie环境下z-index问题解决方法

news/2024/11/24 11:53:17/

ie的z-index问题

在写前端html页面的时候,有些层我们想着让它不论本身在dom结构的什么位置,但是都显示在屏幕的最前方,而不要被后面的元素遮盖,比如弹出的二级菜单、展开的地址选择列表、展开的礼券列表(一般都是xx列表)。

我们都知道要用z-index,让指定的元素的位置更高,从而不被覆盖,大多数浏览器下也恰如我们预想的那样,指定的元素跑到了上层,盖住了其他元素。但是在ie系列就不是这样了,ie6,ie7,ie10,ie11,360的ie兼容模式,都会这样。

ie8不这样,据说是在ie8下处理了这个bug,但是在后续的版本中居然又放出来了。

关于这个z-index的产生原因和处理方法,在Darren_聂微东 - 关注前端技术这篇IE下 z-index 的各种坑 解释和说明的特别清晰、了然,仔细看一遍,就能理解。

这里我将结合实际遇到的情况,进行进一步的说明,因为这里遇到的问题,单单是在父级增加定位属性和z-index值是不可以的,因为页面中存在多组这样的元素的时候,后续的父级元素会穿透前边的弹出列表,从而造成覆盖层级不对的问题。

看下这张图的效果,大家就明白了:

这里写图片描述

处理方法(一)

出上述问题时,html的结构大概是这样的:

<div style='position: relative;z-index:99;'><div>优惠券</div><div>礼券列表(ul li)</div>
</div>

也就是按照常规的处理方式,给父元素增加z-index属性。但是截图中大家也看到了,后续的“优惠券”的小方框跑到了优惠券列表的上边来了,这样效果一定说不过去的。

那么,这时候怎么处理呢?我们的方法是吧礼券列表和优惠券分开,把礼券列表往外放一层,大概类似于这样:

<div ><div>优惠券</div>
</div>
<div style='position: relative;z-index:99;'>礼券列表(ul li)
</div>

那么,这样截图中的问题就没有了,变成了这样:

这里写图片描述

是不是发现,间距特别大?因为absolute元素的位置属性是相对于其父元素中最近的一个relative元素的。第一种方式relative元素在“优惠券”按钮外的div,第二种方式relative元素在“优惠券”按钮下边的div。

所以这里按照需要,再调整一下top值就可以了。这种方式的关键是,将优惠券列表的div外移到足够外层,从而不被后续元素遮盖。

如果最外层没有定位元素会怎么样

这里使用开头说道那篇文章中的例子,例子的原始代码是这样的:

<html>
<head>
<style>.parent{width:200px; height:200px; padding:10px;}.sub{text-align:right; font:15px Verdana;width:100px; height:100px;}.lt50{left:50px;top:50px;}
</style>
</head>
<body>
<div style="position:absolute; background:lightgrey;" class="parent"><div style="position:absolute;z-index:20;background:darkgray;" class="sub">20</div><div style="position:absolute;z-index:10;background:dimgray;" class="sub lt50">10</div>
</div>
<div style="position:absolute;left:80px;top:80px;background:black;" class="parent"><div style="position:absolute;z-index:2;background:darkgray;" class="sub">2</div><div style="position:absolute;z-index:1;background:dimgray;" class="sub lt50">1</div>
</div>
</body>
</html>

效果是这样的:

这里写图片描述

如果20和10所在的div的父元素嵌套链里面没有定位元素会怎么样呢?

<div style="position:absolute; background:lightgrey;" class="parent">

我们去掉第一个div中的position:absolute; ,变成这样:

<div style=" background:lightgrey;" class="parent">

那么效果怎么样呢?

这里写图片描述

是不是得到了我们想要的效果!!

处理方法(二)

上边说道的也就是第二种方法了,也就是让想展示在最高层的元素的父元素嵌套链中不要出现定位元素,京东的购物车页面礼券列表使用的就是这种方式。

需要注意的是,这时候元素的定位位置是相对于页面左上角点的,js需要根据用户点击位置获取到对应的“优惠券”位置,来定位优惠券列表的位置。

总体来说,控制复杂度上,第一种方式是要好一点的。


http://www.ppmy.cn/news/152022.html

相关文章

Unity鼠标控制物体360°旋转和点击移动

一&#xff1a;操作 创建一个游戏对象&#xff08;方块&#xff09; 把代码挂在摄像机上 二&#xff1a;代码 public Camera ca; public GameObject transformObj; Ray ray; RaycastHit RayHit; Vector3 vector3; GameObject obj;//获取点击到的物体 Vector3 startMousePo…

非360手柄玩游戏视角颠倒的解决方案

最近玩游戏遇到一个手柄视角转动的问题&#xff0c;由于缺钱&#xff0c;实在不想入手360的手柄 x360ce这个工具又不好使 下面是找到一个不用工具&#xff0c;通过修改注册表解决视角转动问题的 这本身跟技术没啥关系&#xff0c;但是我决定还是记录一下&#xff0c;方便遇到相…

css3动画旋转360度,CSS3旋转动画(360度旋转、旋转放大、放大、移动) 用法和实例...

CSS3旋转动画(360度旋转、旋转放大、放大、移动) 用法和实例 Internet Explorer 10、Firefox、Opera 支持 transform 属性。 Internet Explorer 9 支持替代的 -ms-transform 属性(仅适用于 2D 转换)。 Safari 和 Chrome 支持替代的 -webkit-transform 属性(3D 和 2D 转换)。 Op…

HTML实现图片360度循环旋转

HTML实现图片360度循环旋转 效果图 //css代码 .header{-webkit-animation:rotateImg 1s linear infinite;width: 80px ;height: 80px;border: 1px solid #ccc;vertical-align: middle; }keyframes rotateImg {0% {transform : rotate(0deg);}100% {transform : rotate(360deg)…

CSS中动画——Z轴平移,旋转,缩放

一、Z轴平移 z轴平移&#xff0c;调整元素在z轴的位置&#xff0c;正常情况下调整元素和人眼之间的距离&#xff0c;距离越大&#xff0c;元素离人越近&#xff0c;z轴平移属于立体效果&#xff08;近大远小&#xff09;&#xff0c;默认情况下网页不支持透视&#xff0c;如果…

360视频简介及ERP投影

360视频&#xff0c;也称全景视频、VR视频&#xff0c;是一种立体视频格式&#xff0c;和普通的2D视频在平面上展开不同&#xff0c;360视频是在球体上展开&#xff0c;JVET成了了专门的工作组研究360视频的编码。 JVET还提供了360Lib参考软件用于360视频的投影格式转换和质量…

360视频:旋转球面投影RSP

旋转球面投影&#xff08;Rotated sphere projection&#xff0c;RSP&#xff09;将球体分为两个相同的部分&#xff0c;然后投影到平面上&#xff0c;宽高比3&#xff1a;2。 图1 RSP投影 球面上两部分的分割线类似于图2中网球上的分割线。 图2 网球分割示意图 Frame Packin…

360视频:正八面体投影OHP

CMP投影是将球体投影到正方体上&#xff0c;但是透视投影过程不改变立体角的大小&#xff0c;即对应于球面上等立体角的两点&#xff0c;投影到立方体上后会出现中心区域密度高而边缘区域密度低的现象&#xff0c;导致投影均匀性较差。当使用的投影体和球体越接近时投影的均匀性…