CSS中的z-index属性基本使用教程
副标题[/!--empirenews.page--]
CSS Code复制内容到剪贴板
z-index: auto | <integer> z-index 接受的属性值为:关键字auto和整数,整数可以是负值(Firefox2.0及之前不支持负值)。 需要注意的是 z-index 虽然很给力,却只能应用于定位元素(即设置了 position 属性为非 static 值),其它情况下,z-index 将被忽略。 对于定位元素而言,z-index 意味着: 确定该元素在当前层叠上下文中的层叠级别。
在规范中说明:当某个元素的 z-index 未显式定义或者被指定为 auto 时,该元素不会产生新的局部层叠上下文。也就是说它可以和兄弟,祖先,后辈元素处在同一个堆叠上下文中,它们被放在一起比较层叠级别,儿子可以盖住祖先,父亲也可以盖住儿子,儿子甚至可以越过祖先,盖住祖先的兄弟,在层叠上下文中,它们是并级的关系。来看这样一个例子 DEMO1: z-index与创建层叠上下文 值得高兴的是,大部分浏览器都实现了这个特性;不过在IE6/7下,不论 z-index 值是否被显式定义,都将产生新的局部层叠上下文,也就是说子元素不可以越过是定位元素的父亲,子元素都处在新创建的局部层叠上下文中,只能在内部进行层叠级别的比较。 深入浅出 某区域内有个浮层提示或者下拉菜单,于是可能需要遮住该区域之下的区域。 HTML
XML/HTML Code复制内容到剪贴板
<div class="a"> ... <div class="tips">我是一个简陋的浮层提示</div> </div> <div class="b"> ... </div> CSS
CSS Code复制内容到剪贴板
.a{position:relative;} .tips{position:absolute;z-index:99;} 如上HTML/CSS代码,很显然,浮层 tips 将可以覆盖在其父级元素 a 的兄弟元素 b 之上。 于是你的意图得到实现,效果如下图: 不过很显然,你依然无法准确的判断出在各浏览器下,tips 能盖住 b 是因为其父级的定位还是本身的定位。 但是我们可以做这样一个测试,我们让 b 也拥有定位,Code如下: CSS
CSS Code复制内容到剪贴板
.a{position:relative;} .tips{position:absolute;z-index:99;} .b{position:relative;} 这段代码run完之后,就比较纠结了,你能得到的效果将会如下: 首先,我们来解读一下这个例子:因为 a 和 b 都是 relative 且没有定义 z-index (等同于z-index:auto),根据后来居上的原则,此时 b 的层叠级别是要高于 a 的,意思就是说 a 是无法遮住 b 的。不过从 DEMO3 中,我们看到 a 的子元素 tips 遮住了 b,这就表示 tips 能越过它,所以可以判断出 a 没有创建新的局部层叠上下文。很明显,这是完全吻合标准对此的定义。 不过这是在非IE6/7之下结果。在IE6/7下,我们看到 tips 并没能遮住 b,也就是说 tips 无法越过父级,因为 a 创建了新的局部层叠上下文,而 a 的层叠级别又比 b 低,所以 tips 无法遮住 b,这也就是在IE6/7下常出现覆盖Bug的根源。 能得出以下结论: 当定位元素没有显式定义z-index值时,不会创建新的局部层叠上下文 所以在实际的场景中,如果是为了相互覆盖而设置为定位,那么显式的定义 z-index 值,将可避免出现创建新局部层叠上下文差异。 如果需要越过祖先和其它区块内部元素进行相互层叠,那么考虑IE6/7的情况,也应该尽量避免给父级元素进定位。 opacity与层叠上下文 我们知道 opacity 属性是用来设置元素不透明度的。但可能知道 opacity 和层叠上下文有关的不多,不过没关系,这里我们简单聊聊这个话题,有两点必须注意: (编辑:西双版纳站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |