用hover配合position(纯css)实现网页动态效果
如上网页效果用js很容易实现,但用纯css实现此动态功能,意在加深对hover和position定位的理解。与大家分享,欢迎指正。
可以看到,这种效果底层是a标签,hover状态中凭空弹出一个解释框,我们称为元素2。那么要想让元素2实现弹出效果而且不影响底层a标签的排布,显然应该用相对定位。因此确立了hover配合position的基本方法。我们以a标签为相对定位的基准,代码如下:
css
a{ display:block; height:30px; width:30px; background-color:green; float:left; margin-left:10px; position:relative; } a span{ display:hidden; } a:hover{ background-color:red; } a:hover span{ width:100px; height:50px; background-color:yellow; display:block; position:absolute; left:35px; top:5px; }
html
<body> <a href="###"><span></span></a> <a href="###"><span></span></a> <a href="###"><span></span></a> </body>
实现的效果如下图所示(黄色span为元素2,绿色为a标签,a标签hover时为红色):
可以看到,hover加position定位实现了弹出解释框的效果。但显然这不是我们想要的效果,关键在于如何使元素2覆盖到a标签上面来。在现代浏览器中很简单,我们给span设置z-index属性便可:
a:hover span{z-index:1;}
现代浏览器中实现效果如下:
这便是我们想要的效果,但是在ie6中…
可以看到万恶的ie6又不兼容了,显然z- index没有起作用,那么怎么才能让元素2覆盖a标签呢,经过大量实验我发现,元素2用来定位的基准标签的兄弟标签是会覆盖元素2的。例如上图,第三个 a标签覆盖了元素2,是因为元素2是以第二个a标签为基准定位的。找到原因,那么解决这个兼容问题也很容易,只需在a标签内再嵌套一个标 签<em>,我们让元素2以<em>为基准定位,就会发现a标签不能再覆盖元素2了(虽然<em>还是会覆盖元素 2,但em是空标签,而且可以设为隐藏,因此无影响)。代码如下:
css
a{ display:block; height:30px; width:30px; background-color:green; float:left; margin-left:10px; } a em{ display:block; height:30px; width:30px; position:relative; } a span{ display:hidden; } a:hover{ background-color:red; } a:hover span{ width:100px; height:50px; background-color:yellow; display:block; position:absolute; left:35px; top:5px; z-index:1; }
html
<body> <a href="###"><em><span></span></em></a> <a href="###"><em><span></span></em></a> <a href="###"><em><span></span></em></a> </body>
这样在ie6中也能完美运行了,最终通过纯css实现了能够兼容的如本文开头的网页动态效果!
posted on 2012-07-03 14:05 shawn.xie 阅读(4888) 评论(2) 编辑 收藏 举报