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需要根据用户点击位置获取到对应的“优惠券”位置,来定位优惠券列表的位置。

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

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

  1. python上方菜单栏不见了_Jupyter Notebook开始菜单栏Anaconda下消失的问题解决方法

    Jupyter Notebook开始菜单栏Anaconda下消失的问题解决方法 发布时间:2020-08-04 10:42:34 来源:亿速云 阅读:98 作者:小猪 这篇文章主要讲解了Jupyter ...

  2. ros构建机器人运动学模型_ROS环境下机器人仿真模型构建方法研究.doc

    ROS环境下机器人仿真模型构建方法研究 ROS环境下机器人仿真模型构建方法研究 摘 要: 在众多的机器人仿真平台中,ROS可以封装机器人硬件.提出在ROS环境下构建机器人的仿真模型方法.设计了机器人仿 ...

  3. win10+python3.6+tensorflow-cpu+keras+Pycharm环境下的tensorflow配置方法

    在pytorch成功配置的基础上,也尝试着把tensorflow和keras安装了一下. Win 10 Anaconda3-5.2.0-Windows-x86_64.exe python3.6 ten ...

  4. python3.6+pytorch-cpu+Pycharm环境下的PyTorch配置方法

    在踩了很多坑,好不容易安装成功后,想着整理总结一下,给后来人一个参考. 安装Anaconda 清华大学开源软件镜像站清华Anaconda安装包下载地址 链接进去选择自己需要的版本就可以下载了哈.这里我 ...

  5. Android开发环境搭建及常见问题解决方法

    Android开发环境搭建及常见问题解决方法 参考文章: (1)Android开发环境搭建及常见问题解决方法 (2)https://www.cnblogs.com/rwxwsblog/p/476978 ...

  6. ubuntu下复制文件到另一个文件夹下权限不够问题解决方法

    ubuntu下复制文件到另一个文件夹下权限不够问题解决方法 在需要被复制的文件夹下打开终端: sudo nautilus 然后选择到需要复制到的文件夹目录下,右击粘贴.

  7. linux 环境启动redis,linux环境下启动redis的方法

    linux环境下启动redis的方法 发布时间:2020-08-24 16:15:54 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了linux环境下启动redis的方法,具有一定借鉴价值, ...

  8. U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件)

    U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件) 把U盘插入装有win10系统的电脑 打开U盘目录(这里假设U盘目录是G:) 选中变成exe的文件,删除(放心,这里的exe是一个几k ...

  9. python爬虫scrapy步骤mac系统_Mac中Python 3环境下安装scrapy的方法教程

    前言 最近抽空想学习一下python的爬虫框架scrapy,在mac下安装的时候遇到了问题,逐一解决了问题,分享一下,话不多说了,来一起看看详细的介绍吧. 步骤如下: # 在Mac上Python3环境 ...

  10. ubuntu+php环境下的Memcached 安装方法

    转载链接:http://www.jb51.net/article/28887.htm Memcached是一套分散式的高速缓存系统,当初是Danga Interactive为了LiveJournal所 ...

最新文章

  1. SAP HUM 如何查询一个HU号码是否被软分配给了某个销售订单 ?
  2. win10打开本机telnet客户端
  3. 【LeetCode】4.寻找两个正序数组的中位数
  4. 自定义AlertDialog布局
  5. QT学习笔记(2)----- QT安装教程
  6. WebFlux02 SpringBoot WebFlux项目骨架搭建
  7. [bzoj1011] [HNOI2008]遥远的行星
  8. idea 设置java栈空间,如何为Intellij编译器提供更多堆空间?
  9. 解决Ubuntu下pycharm无法输入中文的问题
  10. HDFS基本原理及数据存取实战
  11. OpenStack的组件
  12. 如何从课堂与教学内容两方面提高培训效率
  13. 深入解读Linux进程调度系列(2)——调度类sched_class详解
  14. repeater没有数据显示暂无数据,无记录
  15. ubuntu 16.04 运行php,乌班图Ubuntu 16.04下安装PHP 7过程详解
  16. 【数学】扩展欧几里得算法
  17. c语言编写作息时间表_嵌入式杂谈之中断向量表
  18. 生物信息学python常用脚本_生物信息工程师必备的编程语言清单
  19. js的document对象及操作
  20. 张驰咨询:某包装印刷集团第五期六西格玛项目通过专家评审

热门文章

  1. 苹果app退款_app退款理由写什么好?苹果退款理由怎么写才好?
  2. 在BUF和BUF+1、BUF+2单元分别放有一个无符号字节型数,编程序将其中最大数存入MAX单元,并在屏幕上显示
  3. 偷得浮生半日闲,您有啥事它出马
  4. 代码分析UEFI的执行流程
  5. 计算机网络:非持久HTTP连接 VS 持久性HTTP 连接
  6. Android各版本对应的SDK及JDK版本要求
  7. 秀米排版,从入门到入土(一)
  8. 电脑搜索不到wifi信号的问题解决
  9. layui表单提交时出现一闪而过的验证信息的原因
  10. 读书笔记-MySql必知必会(二)