当前位置: 首页 > 图文教程 > 网页制作 > CSS样式表 > CSS 层叠加的5条原则

CSS样式表
关于CSS的一些基础应用
纯CSS实现的无侵入的卡盘(幻灯片)
w3c标准自适应高度height100%不起作用的问题分析
CSS代码组合和嵌套
CSS常用属性缩写实例
CSS代码缩写实例以及CSS缩写原因总结
网页字体大小的设计技巧
CSS3的新特性介绍
DOCTYPE和XHTML的相关认识
DIV CSS建立的符合web标准网页的好处
CSS语法缩写规则
FireFox浏览器和IE浏览器下CSS兼容问题
CSS代码属性分组的写法例子
解决全部网页木马的技巧
css教程:DIV垂直居中的办法
css常用布局多行多列
不同浏览器的CSS Hack写法小结
CSS 控制字符宽度省略号效果 兼容浏览器
纯CSS实现的三级下拉菜单实现代码
快速定位页面中复杂 CSS BUG

CSS样式表 中的 CSS 层叠加的5条原则


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-12   浏览: 60 ::
收藏到网摘: n/a

首先明确几点在文中所需要用到的概念:

       
  1. 静态定位:position:static(为position属性的默认值)。
  2.    
  3. 动态定位:position:relative或position:absolute或position:fixed。
  4.    
  5. 祖元素:任意包含该元素的元素。
  6.    
  7. 父元素:直接包含该元素的祖元素。
  8.    
  9. 同辈元素:拥有共同的父元素的元素。

注:这些概念为作者自定义,仅用于本文。

引用:

关于同辈元素是个非常关键的词,这里还需要详细解释一下。

       
  1. <div>
  2.    
  3.     <div></div>
  4.    
  5.     <div id="a"></div>
  6.    
  7.     <div></div>
  8.    
  9.     <div></div>
  10.    
  11.     <div></div>
  12.    
  13.     <div></div>
  14.    
  15. </div>
  16.    
  17. <div id="f">
  18.    
  19.     <div></div>
  20.    
  21.     <div id="b"></div>
  22.    
  23.     <div id="c"></div>
  24.    
  25.     <div></div>
  26.    
  27.     <div></div>
  28.    
  29.     <div></div>
  30.    
  31. </div>

在这个例子中,div#a与div#b并不是“同辈元素”,只有像div#b和div#c这样拥有同样父体div#f的的元素才能叫“同辈元素”。

引用结束

接下来看看这五条法则

法则一:同辈元素定位方式相同,且无z-index设置时,html靠后者居上。

法则二:同辈元素同为动态定位时,且有z-index设置时,z-index值大者居上。

 

 猛点这里测试

法则三:同辈元素定位方式不同时,动态定位居上。

猛点这里测试

法则四:非同辈元素,任意一者及其祖元素不具备动态布局时,html靠后者居上。

 

猛点这里测试

法则五:【重要】非同辈元素,任意一者或其祖元素拥有动态定位时,同时各自向上寻找动态定位的祖元素,并分别从中拿出具备最高级别的祖元素(或其本身)进行比较。 

       
  1. <div id="ab" style="position:absolute;">
  2.    
  3.     <div id="a" style="position:relative; z-index:100;">
  4.    
  5.         <div id="a_inner1">
  6.    
  7.             <div id="a_inner2">
  8.    
  9.                 <div id="a_inner3" style="position:relative; z-index:98;">
  10.    
  11.                     <div id="a_inner4">
  12.    
  13.                         <div id="a_inner5">
  14.    
  15.                         </div>
  16.    
  17.                     </div>
  18.    
  19.                 </div>
  20.    
  21.             </div>
  22.    
  23.         </div>
  24.    
  25.     </div>
  26.    
  27.     <div id="b">
  28.    
  29.         <div id="b_inner1">
  30.    
  31.             <div id="b_inner2">
  32.    
  33.                 <div id="b_inner3" style="position:relative; z-index:99;">
  34.    
  35.                     <div id="b_inner4">
  36.    
  37.                     </div>
  38.    
  39.                 </div>
  40.    
  41.             </div>
  42.    
  43.         </div>
  44.    
  45.     </div>
  46.    
  47. </div>

 

情况1:子元素的z-index无论多大,父元素大者居上。

情况2:父元素居下,子元素也可以居上。

情况1、情况2结合扩展比较。

其实前四点都是基础,只有第五点比较难于理解,这里详细解释一下:

在这个例子中,我们来比较div#a_inner5和div#b_inner4的层叠关系。
到它们所共同拥有的祖元素div#ab的下一级为止,div#a_inner5的祖元素包括:div#a,div#a_inner1,div#a_inner2,div#a_inner3,div#a_inner4;div#b_inner4的祖元素包括:div#b,div#b_inner1,div#b_inner2,div#b_inner3。
然后分析它们的祖元素中具有动态定位的:div#a_inner5的祖元素中含有动态定位的元素有:div#a,div#a_inner3;div#b_inner4的祖元素中含有动态定位的元素有:div#b_inner3。
然后再拿出最高级进行比较:div#a > #div#b_inner3。

父元素居下,子元素也可以居上的情况,则是利用非同辈元素在祖元素具备动态布局时,其比较已经与position:static无关,而其祖元素却可以通过html的位置来进行比较。

引用结束

当然,有时候还存在特例,比如flash、比如ie6中的select无法遮住,这些都属于异常情况,大家可以自己搜索一下相关文章。