现在的位置: 首页 > 综合 > 正文

用hover配合position(纯css)实现网页动态效果

2012年10月26日 ⁄ 综合 ⁄ 共 1517字 ⁄ 字号 评论关闭

如上网页效果用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实现了能够兼容的如本文开头的网页动态效果!

【上篇】
【下篇】

抱歉!评论已关闭.