我选择了纯 css 解决方案,不需要 js。我使用的 css 过渡不是完全跨浏览器,但它们应该会优雅地降级,嘿,如果你想使用劣质的浏览器(阅读 IE),你应该期待劣质的浏览体验。
我的代码如下所示(我稍微简化了 HTML 以使内容更具可读性):
<a class="hover-me">
<span class="caption">VIEW</span>
<img src="http://lorempixel.com/261/261/"/>
</a>
.hover-me {
position: relative;
width: 250px;
display: inline-block;
}
.hover-me img{
width:100%;
height:auto;
display: block;
}
.hover-me:after {
content: '';
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
z-index: 1;
background: rgba(255,0,0,.5);
transition: all .5s ease;
opacity: 0;
}
.hover-me .caption {
display: block;
height: 50%;
position: absolute;
top: 50%;
left: 0; right: 0;
margin-top: -10px;
text-align: center;
transition: all .5s ease;
opacity: 0;
z-index: 2;
color: #fff;
line-height: 20px;
}
.hover-me:hover:after , .hover-me:hover .caption {
opacity: 1;
}
您可能会注意到:
- 在不透明度的帮助下隐藏了标题和叠加层,以使其可以使用 css 进行转换。
- 拉伸是通过添加 abottom: 0;
或height: 100%;
- 通过将 top 设置为 50% 并将 margin-top 设置为文本高度的一半来垂直居中的
- 覆盖是通过:after
链接上的 a 实现的,因为标题有现在还没有全高。这也是 z-index 存在的原因,否则叠加层会出现在标题的顶部。
不要忘记通过诸如 prefixr 之类的东西运行你的代码(或者使用一些 less/sass mixins,如果你有它们)以获得最大的跨浏览器支持(主要是为了不透明度和过渡)
我希望代码清晰。如果没有,请随时询问。我还更新了你的小提琴来演示:http: //jsfiddle.net/5X7ub/25/