CSS中 opacity的设置影响了index(层数)的改变

在使用 opacity 属性来实现页面整体透明的时候,发现了一个问题。如果两个层发生了重叠,使用了 opacity 属性并且属性值小于1的层,会覆盖掉后面的层。于是动手做了个实验,来验证 opacity 的层次。

网页中的层叠规律是这样的:如果两个层都没有定义 position 属性为 absolute 或者 relative 属性,哪个层的HTML代码放在后面,哪个层就显示在上面。如果指定了 position 属性,并且设置了 z-index 属性,谁的值大,谁就在上面。

Opacity 属性引发的层叠问题 
而对于没有激活 z-index 的普通层来说,如果那个层使用了属性值小于1的 opacity 属性,哪个层就会显示在上面。我们做一个Demo。代码如下:

<html> 
<head> 
        <title >带有 opacity 的层叠问题</title> 
        <style> 
        html{padding:40px;} 
        .dd{width:100px;height:100px;} 
        #a{background:red;} 
        #b{background:blue;margin-left:20px;margin-top:-80px;} 
        #c{background:green;margin-left:40px;margin-top:-80px;} 
        </style> 
</head> 
<body> 
        <div id="a"></div> 
        <div id="b"></div> 
        <div id="c"></div> 
</body> 
</html>

保存为 html 文件打开之后,可以看到正常的次序 

正常的层叠

这时候,我们为 #a 加上属性 opacity:0.9 神奇的事情发生了,它覆盖了另外两个层: 

加上小于1的 opacity 之后的层叠

只有当为另一个层(例如:#c)也设置一个小于1的opacity值(例如:0.8)之后,后面的 #c 才能安装正常的规则覆盖在 #a 上面。 

同时为另一个层赋值 opacity

这样,增加了小于1的 opacity 属性的层,升高了一个层次。至于里面的科学原理,我没有想明白,或许也可能是一个小BUG。但是有时候这种情况是我们不希望发生的。

通过定义 position 的属性来解决问题 
那么如何来解决这个问题呢?前面也说过了,正常的情况下,指定了 position 并且指定了 z-index 值的层,拥有比普通层更高的层次,那么指定 opacity 的层和指定了 position 的层相比呢?我们对 #b 加上 position:relative 看看。这时候的样式代码如下:

#a{background:red;opacity:0.9;} 
#b{background:blue;margin-left:20px;margin-top:-80px;position:relative;} 
#c{background:green;margin-left:40px;margin-top:-80px;opacity:0.8;} 
保存刷新后,看到效果是这样的: 

对层使用了 position 属性之后的层叠效果

也就是说,对层使用 position 属性的 relative 之后,可以使其层次和 opacity 相同,这样之后,按照正常的排序进行层叠显示(在后面的实验中,我对 absolute 属性值也做了测试,结果和 relative 属性值表现的相同)。当我们取消了 #c 的 opacity 属性之后,我们可以看到,#c 被排在了最下面。 

对底层取消 opacity 属性之后的效果

还没有完,之前只是对 #b 激活了 position:relative 属性,还没有使用 z-index。我们对 #b 进行了 z-index 的设置(例如:100),很显然的,#b 成为了最顶层。 

对中间层设置 z-index 的效果

层叠问题总结 
使用了 position 属性值为 absolute、relative 的层,将会比普通层更高层次。使用了小于1的 opacity 属性的层,也比普通层更高层次并且和指定 position 的层同层,但是不支持 z-index 属性,所以指定 position 的层,可以使用 z-index 属性,来覆盖带有小于1的 opacity 属性的层。”

转自: 小前端学习 http://www.cnblogs.com/leolovexx/p/5440061.html#3514684

时间: 2024-08-25 19:30:48

CSS中 opacity的设置影响了index(层数)的改变的相关文章

CSS中的间距设置与盒子模型

CSS间距 内补白 外补白 盒子模型 CSS间距 很多时候我们为了美观,需要对内容进行留白设置,这时候就需要设置间距了. 内补白 设置元素的内间距 padding: 检索或设置对象四边的内部边距 padding:10px; 上下及两边设置 padding:5px 10px; 由上边界开始,顺时针设置 padding:10px 20px 30px 40px 单边设置 padding-top: 检索或设置对象顶边的内部边距 padding-right: 检索或设置对象右边的内部边距 padding-

15 css中边框的设置

<!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style type="text/css"> p{ border:1px solid red; } li{ border-bottom:1px dotted red; } </style> </head> <

css中如果没有设置display,则无法显示动画效果!!!

1 <script type="text/javascript" src="jquery-1.7.1.js"></script> 2 <script type="text/javascript"> 3 4 $(document).ready(function(){ 5 6 var x = 10; 7 var y = 10; 8 9 $('.prompt_a').mouseover(function(e){ 10

css中的清除float影响,containing的div跟随floated sub的方法

/** * For modern browsers * 1. The space content is one way to avoid an Opera bug when the * contenteditable attribute is included anywhere else in the document. * Otherwise it causes space to appear at the top and bottom of elements * that are clear

CSS中不透明度继承问题的处理

关于CSS中不透明度的设置,除了兼容方面的问题,还有不透明度继承问题,这里只讨论下后者. 那么, 什么时候会发生不透明度继承问题? 当文档结构中有父子嵌套关系的时候,并且父元素有不透明度属性设置时,会发生不透明度继承问题,此时子元素也继承了父元素的不透明度,并且再另外设置子元素不透明度是无效的(如果父元素没有设置不透明度,子元素的设置是有效的). 下面是相关代码和效果图: CSS部分: #parent{ height:400px; width:500px; background:green; o

css颜色属性及设置颜色的地方

css颜色属性 在css中用color属性规定文本的颜色. 默认值是not specified 有继承性,在javascript中语法是object.style.color="#FF0000" 取值方法 1,英文单词color:name;规定颜色值为颜色名称的颜色. 但是英文单词能够表达的颜色是有局限性的,不是所有的颜色都有英文名字,就像所有的颜色也不会都有中文字一样. 2,RGB(red红色,green绿色,blue蓝色) rgb格式,格式rgb(0,0,0): rgb格式,其实 就

深入学习CSS中如何使用定位

CSS中定位介绍 position属性在英文单词中表示位置的意思,在CSS中主要作用设置元素的定位. CSS中一共有3种定位如下: 属性值 描述 fixed 设置固定定位. relative 设置相对定位. absolute 设置绝对定位. 固定定位实践 在实践固定定位之前我们先看看代码结构是什么样子的呢. 代码块 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8

css中margin-top或者margin-bottom失效

css中margin-top是设置容器的外间距了距离了,div嵌套后,margin-top或者margin-bottom失效了,在网上打到下面的方法可以解决. 设计页面的时候遇到一个神奇的问题,下面是html的代码 <body>   <div class="homeNav">      <div class="homeCategory  ">      </div>       </div></bod

3.css中的颜色

css中颜色的设置形式主要有三种方式:颜色名称.十六进制代码和十进制代码. 在古老的 HTML4 时,颜色名称只有 16 种. 颜色名称 十六进制代码 十进制代码 含义  black  #000000  0,0,0  黑色   silver  #c0c0c0  192,192,192  银色   gray  #808080  128,128,128  灰色  white  #ffffff  255,255,255  白色  maroon  #800000  128,0,0  栗色  red