Position:Relative/Absolute无法冲破的等级

2016-02-19 17:22 14 1 收藏

下面图老师小编要向大家介绍下Position:Relative/Absolute无法冲破的等级,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - Web开发 】

  前段时间记得好像是谁在群里提出了一个实在是让大家都觉得很不理解的一个问题:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)
ulli第一块/lilispan第二块/span/lili第三块/lili第四块/lili第五块/li/ul

  如果我我们设定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:100px; background:#c00; position:absolute; top:0; left:100px; z-index:1000;}

  试一下很容易发现我们的子级,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,并且属性都需要一样怎么办?当然我们不大会需要有这样的效果。但是我们需要有这样的效果:子级全部是隐藏的,当有鼠标反应时出现并且浮在所有的内容之上。我们要知道,这确实是件让人头疼的事,因为我们上面见识到了,子级在显示的时候都被压在了下一个父级标签的下面。下面我们来实现一下这个鼠标反应的定位效果:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)
ullia href="" title=""span第一块/span/a/lilia href="" title=""span第二块/span/a/lilia href="" title=""span第三块/span/a/lilia href="" title=""span第四块/span/a/lilia href="" title=""span第五块/span/a/li/ul

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

*{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;}

  我们设定了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; }

  我们只要针对a:hover来设定其属性为position:relative;就可以了,这样只有在鼠标触发的时候A才会被赋于一个相对定位的属性。这样就完成可以解决被其它父级标签所挡的尴尬了。

  当然如果不介意IE5这样的浏览器我们还可以把代码再做简化:

ullispan第一块/span/lilispan第二块/span/lilispan第三块/span/lilispan第四块/span/lilispan第五块/span/li/ul

  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; }

来源:http://www.tulaoshi.com/n/20160219/1615064.html

延伸阅读
标签: Web开发
使用CSS来定位页面内层的位置,一直是比较难以掌握的事情,很多时候,往往被绝对定位的元素,总是以浏览器的左上角为坐标原点,此时,如果浏览器的大小改变,被定义的层就会偏离设计想要的位置,让人很挠头。 其实,要想控制好层的绝对定位,只要理解CSS中关于定位(position)的定义,一切就会变得轻松简单。 CSS中关于定位...
标签: Web开发
今天做页的时候,遇到了一个问题:div无法对父对象绝对定位。 div id="fa"      div id="so" style="position:absolute; top:0; right:12px"      /div /div 但是发现无论怎么调整都是针对body定位,郁闷! 看了下css手册,也没发现有什么不对。到网上查了下...
标签: Web开发
语法: background-position : length || length background-position : position || position 取值: length : 百分数 | 由浮点数字和单位标识符组成的长度值。请参阅 长度单位 position : top | center | bottom | left | center | right 说明: 设置或检索对象的背景图像位置。必须先指定 background-image 属性。 该属性定...
标签: Web开发
先看看这两个方法的定义。 offset(): 获取匹配元素在当前视口的相对偏移。 返回的对象包含两个整形属性:top 和 left。此方法只对可见元素有效。 position(): 获取匹配元素相对父元素的偏移。 返回的对象包含两个整形属性:top 和 left。为精确计算结果,请在补白、边框和填充属性上使用像素单位。此方法只对可见元素有效。 真的就这么...
标签: qq
手机版在线 【手机完成】QQ手机版在线满六小时,获得活跃天1天。 电脑版在线 【电脑完成】用电脑登录QQ两小时,可获得活跃天0.5天。 非隐身在线 非隐身在线时长两小时,可获得活跃天0.2天。 QQ勋章墙加速 【电脑完成】 QQ勋章墙加速,可获得活跃天0.2天。 在qq主面板右上角边点击勋章墙进入, 按...

经验教程

179

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部