当前位置:  编程技术>WEB前端

position:relative/absolute无法冲破的等级

    来源: 互联网  发布时间:2014-09-06

    本文导语:  注:本文实例在IE5.x下可能会显示不出来,请使用IE6、IE7、Firefox、Opera等浏览器来调试! 前段时间记得好像是谁在群里提出了一个实在是让大家都觉得很不理解的一个问题:  代码如下:   第一块   第二块   第三块   第四...

注:本文实例在IE5.x下可能会显示不出来,请使用IE6、IE7、Firefox、Opera等浏览器来调试!
前段时间记得好像是谁在群里提出了一个实在是让大家都觉得很不理解的一个问题: 
代码如下:

      
  • 第一块
  •   
  • 第二块
  •   
  • 第三块
  •   
  • 第四块
  •   
  • 第五块
  •   
 

如果我我们设定LI为position:relative;设置span为position:absolute;那么我们会发现无论SPAN的z-index值设置得再高都将永远在后面父级的下面。
代码如下:

*{margin:0; padding:0; list-style:none;}  
li {width:100px; height:100px; margin:0 5px 0 0; background:#000; float:left; position:relative; z-index:1;}  
li span {width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000;}  

/**/
  • 第一块
  • 第二块
  • 第三块
  • 第四块
  • 第五块

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
    提示:您可以先修改部分代码再运行
试一下很容易发现我们的子级,z-index的值达到了1000的被设定了position:absolut;子级都被档在了父级的下面。我想了很久,我觉得其根本问题是:设置同样的position:relative/absolute;同级标签之间的等级是无法用z-index超越的。我们上面的例子中的第一个LI的等级永远都要小于后一个LI的等级,所以我们在LI里的子级身上设置了position:absolute;,给了非常高的z-index值。
也许你会这样来想:只要针对有span的LI设置position:relative;不就好了吗?非常正确。当其它的LI都不设置position:relative;那么我们需要的那个子级就可以浮在所有的内容之上。但是如果实际上,所有的LI中都要有span,并且属性都需要一样怎么办?当然我们不大会需要有这样的效果。但是我们需要有这样的效果:子级全部是隐藏的,当有鼠标反应时出现并且浮在所有的内容之上。我们要知道,这确实是件让人头疼的事,因为我们上面见识到了,子级在显示的时候都被压在了下一个父级标签的下面。下面我们来实现一下这个鼠标反应的定位效果:
代码如下:

      
  • 第一块
  •   
  • 第二块
  •   
  • 第三块
  •   
  • 第四块
  •   
  • 第五块
  •   
  

我们通过链接的鼠标事件来完成这个显示隐藏效果:
代码如下:

*{margin:0; padding:0; list-style:none;}  
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}  
li a {position:relative; z-index:1; display:block; height:100px; width:100px;  background:#000;}  
li a:hover {background:#000000;} 
li span {display:none;}  
li a:hover span {display:block; background:#c00; width:200px; height:200px; position:absolute; top:0; left:100px; z-index:1000; }  

/**/
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
    提示:您可以先修改部分代码再运行
我们设定了a为position:relative;这样他的子级就会根据父级的左上角为坐标原点进行定位了。然后我们设定span的具体形状以及定位属性,然后把他隐藏了。我们再通过A的伪类:hover使得span被激活。我们看一下结果,我们会发现,所有应该在上面的现在全在下面了。那我们怎么解决这个难题呢,其实以CSS想强行突破是不太可能,所以我们反过来想,能不能让这个没有被触发的父级标签没有position:relative;属性,而只是触发的时候才有级这个父级赋上这样的值?其实想到这里基本上已经可以解决所有的问题了:
代码如下:

*{margin:0; padding:0; list-style:none;}  
li {height:100px; margin:0 5px 0 0; float:left; width:100px;}  
li a {display:block; height:100px; width:100px;  background:#000;}  
li a:hover {position:relative; z-index:1; }  
li span {display:none;}  
li a:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }  

/**/
[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
    提示:您可以先修改部分代码再运行
我们只要针对a:hover来设定其属性为position:relative;就可以了,这样只有在鼠标触发的时候A才会被赋于一个相对定位的属性。这样就完成可以解决被其它父级标签所挡的尴尬了。
当然如果不介意IE6或是IE5.X这样的浏览器我们还可以把代码再做简化:
代码如下:

      
  • 第一块
  •   
  • 第二块
  •   
  • 第三块
  •   
  • 第四块
  •   
  • 第五块
  •   
  

CSS可以改成这样:
代码如下:

*{margin:0; padding:0; list-style:none;}  
li {height:100px; margin:0 5px 0 0; float:left; width:100px; background:#000;}  
li:hover {position:relative; z-index:1;}  
li span {display:none;}  
li:hover span {display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }  

*{margin:0; padding:0; list-style:none;} li {width:100px; height:100px; margin:0 5px 0 0; background:#000; float:left;} li:hover { position:relative; z-index:1;} li span {display:none; } li:hover span { display:block; width:200px; height:200px; background:#c00; position:absolute; top:0; left:100px; z-index:1000; }
  • 第一块
  • 第二块
  • 第三块
  • 第四块
  • 第五块

[Ctrl+A 全选 注:如需引入外部Js需刷新才能执行]
    提示:您可以先修改部分代码再运行
原始阅读:
http://andymao.com/andy/post/67.html

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.nio类buffer的类成员方法: position定义及介绍
  • css 之 background-position-x
  • java命名空间java.nio.channels类filelock的类成员方法: position定义及介绍
  • display&position
  • java命名空间javax.swing.border类titledborder的类成员方法: default_position定义及介绍
  • IE6支持position:fixed完美解决方法
  • java命名空间javax.sound.midi类shortmessage的类成员方法: song_position_pointer定义及介绍
  • rs=statement.executeQuery("SELECT Name,PassWord,Position FROM names where Name="+UserName+" and PassWord="+UserPassWord"");错了
  • java命名空间javax.swing.text.html类css.attribute的类成员方法: background_position定义及介绍
  • MySQL中的LOCATE和POSITION函数使用方法
  • java命名空间javax.swing.plaf.basic类basicsliderui的类成员方法: positive_scroll定义及介绍
  • 跨浏览器的实践:position:fixed 层的固定定位
  • java命名空间javax.swing.text类position.bias的类成员方法: forward定义及介绍
  • socket.getInputStream().read(byteArray,position,lengh)是如何工作的???
  • java命名空间java.lang类double的类成员方法: positive_infinity定义及介绍
  • ie6,ie7,ie8完美支持position:fixed的终极解决方案
  • java命名空间java.lang类float的类成员方法: positive_infinity定义及介绍
  • 使用CSS样式position:fixed水平滚动的方法
  • java命名空间javax.swing.text.html类css.attribute的类成员方法: list_style_position定义及介绍
  • java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operation for the current cursor position.(在线)
  • java命名空间java.awt.event类inputmethodevent的类成员方法: caret_position_changed定义及介绍
  • 推荐深入理解css中的position定位和z-index属性


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3