CSS基础(七):z-index详解

概念

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。

层级关系的比较

1. 对于同级元素,默认(或position:static)情况下文档流后面的元素会覆盖前面的。

2. 对于同级元素,position不为static且z-index存在的情况下z-index大的元素会覆盖z-index小的元素,即z-index越大优先级越高。

3. IE6/7下position不为static,且z-index不存在时z-index为0,除此之外的浏览器z-index为auto。

4. z-index为auto的元素不参与层级关系的比较,由向上遍历至此且z-index不为auto的元素来参与比较。

顺序规则

如果不对节点设定 position 属性,位于文档流后面的节点会遮盖前面的节点。

<div id="a">A</div>
<div id="b">B</div>

定位规则

如果将 position 设为 static,位于文档流后面的节点依然会遮盖前面的节点浮动,,所以 position:static 不会影响节点的遮盖关系。

<div id="a" style="position:static;">A</div>
<div id="b">B</div>

如果将 position 设为 relative (相对定位),absolute (绝对定位) 或者 fixed (固定定位),这样的节点会覆盖没有设置 position 属性或者属性值为 static 的节点,说明前者比后者的默认层级高。

<div id="a" style="position:relative;">A</div>
<div id="b">B</div>

在没有 z-index 属性干扰的情况下, 根据这顺序规则和定位规则, 我们可以做出更加复杂的结构. 这里我们对 A 和 B 都不设定 position, 但对 A 的子节点 A-1 设定 position:relative. 根据顺序规则, B 会覆盖 A, 又根据定位规则 A‘ 会覆盖 B.

<div id="a">
    <div id="a-1" style="position:relative;">A-1</div>
</div>
<div id="b">B</div>

上面互相覆盖在什么时候用到这样的实现? 看起来偏门, 其实很常用, 比如说, 电子商务网站侧栏的类目展示列表就可以用这个技巧来实现.

下图是某网站的类目展示区域, 二级类目的悬浮层覆盖一级类目列表外框, 而一级类目的节点覆盖二级类目的悬浮层. 如果使用 CSS 实现展示效果, 一级类目的外框相当于上面例子中的 A, 一级类目的节点相当于 A-1, 二级类目的悬浮层相当于 B.

参与规则

我们尝试不用 position 属性, 但为节点加上 z-index 属性. 发现 z-index 对节点没起作用. z-index 属性仅在节点的 position 属性为 relative, absolute 或者 fixed 时生效.

<div id="a" style="z-index:2;">A</div>
<div id="b" style="z-index:1;">B</div>
<div id="c" style="z-index:0;">C</div>

<div id="a" style="z-index:2;">A</div>
<div id="b" style="position:relative;z-index:1;">B</div>
<div id="c" style="position:relative;z-index:0;">C</div>

默认值规则

如果所有节点都定义了 position:relative. z-index 为 0 的节点与没有定义 z-index 在同一层级内没有高低之分; 但 z-index 大于等于 1 的节点会遮盖没有定义 z-index 的节点; z-index 的值为负数的节点将被没有定义 z-index 的节点覆盖.

<div id="a" style="position:relative;z-index:1;">A</div>
<div id="b" style="position:relative;z-index:0;">B</div>
<div id="c" style="position:relative;">C</div>
<div id="d" style="position:relative;z-index:0;">D</div>

从父规则

如果 A, B 节点都定义了 position:relative, A 节点的 z-index 比 B 节点大, 那么 A 的子节点必定覆盖在 B 的子节点前面.

<div id="a" style="position:relative;z-index:1;">
    <div id="a-1">A-1</div>
</div>

<div id="b" style="position:relative;z-index:0;">
    <div id="b-1">B-1</div>
</div>

如果所有节点都定义了 position:relative, A 节点的 z-index 和 B 节点一样大, 但因为顺序规则, B 节点覆盖在 A 节点前面. 就算 A 的子节点 z-index 值比 B 的子节点大, B 的子节点还是会覆盖在 A 的子节点前面.

很多人将 z-index 设得很大, 9999 什么的都出来了, 如果不考虑父节点的影响, 设得再大也没用, 那是无法逾越的层级.

文章参考

时间: 2024-08-11 18:43:59

CSS基础(七):z-index详解的相关文章

OSI七层模型详解 TCP/IP协议

总结 OSI中的层 功能 TCP/IP协议族 应用层 文件传输,电子邮件,文件服务,虚拟终端 TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等 表示层 数据格式化,代码转换,数据加密 没有协议 会话层 解除或建立与别的接点的联系 没有协议 传输层 提供端对端的接口 TCP,UDP 网络层 为数据包选择路由 IP,ICMP,OSPF,EIGRP,IGMP 数据链路层 传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,MTU 物理层 以二进制数据形式在物理媒体上

mysql基础篇 - SELECT 语句详解

基础篇 - SELECT 语句详解 SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELECT 语句的用法. 二.实验准备 在正式开始本实验内容之前,需要先下载相关数据库表,搭建好一个名为mysql_shiyan 的数据库(有三张表:department,employee,project),并向其中插入数据. 具体操作如下,首先输入命令进入 /home/shiyanlou/Desktop 目录: cd /

java基础之HTTP协议详解

关于本文,是听了某个老师的课程之后倍感自己对HTTP了解不够深入,因此决定写此博文. 首先,可以参考此文:http://blog.csdn.net/gueter/article/details/1524447 第一部分:浏览器与服务器通信过程: 第二部分:HTTP请求介绍: 第三部分:HTTP协议响应 java基础之HTTP协议详解

基础正则表达式和fgrep详解

[grep/ egrep] 语法: grep [-cinvABC] 'word'filename -c :打印符合要求的行数 -i :忽略大小写 -n :在输出符合要求的行的同时连同行号一起输出 -v :打印不符合要求的行 -A :后跟一个数字(有无空格都可以),例如 –A2则表示打印符合要求的行以及下面两行 -B :后跟一个数字,例如 –B2 则表示打印符合要求的行以及上面两行 -C :后跟一个数字,例如 –C2 则表示打印符合要求的行以及上下各两行 #grep -A 2 halt /etc/

Linux基础知识之挂载详解(mount,umount及开机自动挂载)

Linux基础知识之挂载详解(mount,umount及开机自动挂载) 转载自:http://www.linuxidc.com/Linux/2016-08/134666.htm 挂载概念简述: 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"至根文件系统上的某个目录来实现,此关联操作即为"挂载",此目录即为"挂载点",解除此关联关系的过程称之为"卸载" 1.挂载:根文件系统外通过关联至根文件系统上的某个目录来实现访问

Java基础 之Java动态绑定详解

程序绑定的概念: 绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来.对java来说,绑定分为静态绑定和动态绑定:或者叫做前期绑定和后期绑定 静态绑定(早绑定 编译器绑定): 在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现.例如:C. 针对java简单的可以理解为程序编译期的绑定:这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定 动态绑定(迟绑定 运行期绑定): 后期绑定:在运行时根据具体对象的类型进行绑定. 若一种语言实现

AxureRP7.0基础教程系列 部件详解水平线和垂直线 HORIZONTAL & VERTICAL LINES

原型库网站-讲师金乌原创发布,可自由转载,请注明出处! Axure中文官网:www.AxureRP.cn   <AxureRP7.0部件详解> 水平线和垂直线 HORIZONTAL & VERTICAL LINES 使用案例 将页面区块化 最常见的用法是将内容分解成几个部分,比如,讲页面分为 header 和 body. 编辑线条 添加箭头 线条可以通过工具栏中的箭头样式转换为箭头:选中线条,点击箭头样式,在下拉列表中选择箭头样式. 线宽.颜色和样式 线条可以添加颜色.设置宽度和添加样

基础拾忆------委托详解

目录: 基础拾忆------委托详解 基础拾忆------接口详解 基础拾忆------泛型详解 前言: C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针.委托是存有对某个方法的引用的一种引用类型变量.引用可在运行时被改变.委托(Delegate)特别用于实现事件和回调方法.所有的委托都派生自 System.Delegate 类.把一个方法当作参数传递,让其它方法进行调用执行. 好比:今天中午不想出去,委托小明帮我带份饭,我要买饭,但是小明帮我买的. 1.委托的声明 委托声

基础拾忆------接口详解

目录: 基础拾忆------接口详解 基础拾忆------泛型详解 前言 接口定义了所有类继承接口时应遵循的契约.接口定义了 "要什么" ,派生类定义了 "怎么给" . 引用CLR VIA C#(类和接口继承) 在Microsoft.Net Framwork中,有一个名为System.Object的类,它定义了4个公共实例方法:ToString, Equals, GetHashCode和GetType.该类是其他所有类的根或者说最终基类.换言之,所有类都继承了Obj

Java基础之hashCode方法详解

想要明白hashCode的作用,必须要先知道java中的集合.(不明白的请看Java基础之集合框架详解(二)List篇和Java基础之集合框架详解(三)Set篇) Java中的Collection集合有两类,一类是List,另一类是Set,前者集合内的元素是有序的,元素可以重复:后者元素无序且元素不可重复.而我们通常使用Object.equals方法来判断两个元素是否重复.即当我们想查找一个元素中是否包含某个对象时,就是逐一取出每个元素与要找的元素进行比较,当发现某个元素与要查找的对象进行equ