我建议使用伪元素代替覆盖元素。因为伪元素不能添加到封闭img
的元素上,你仍然需要包装img
元素。
现场示例-带有文本的示例
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
至于CSS,在元素上设置可选尺寸,并相对定位。.image
如果您的目标是响应式图像,只需省略尺寸,这仍然有效(示例)。值得注意的是,尺寸必须在父元素上,而不是img
元素本身,请参阅.
.image {
position: relative;
width: 400px;
height: 400px;
}
给子元素一个父img
元素的宽度并添加以修复默认基线对齐问题。100%
vertical-align:top
.image img {
width: 100%;
vertical-align: top;
}
至于伪元素,设置一个内容值并相对于.image
元素绝对定位。宽度/高度100%
将确保这适用于不同的img
尺寸。如果要转换元素,请设置不透明度0
并添加转换属性/值。
.image:after {
content: '\A';
position: absolute;
width: 100%; height:100%;
top:0; left:0;
background:rgba(0,0,0,0.6);
opacity: 0;
transition: all 1s;
-webkit-transition: all 1s;
}
1
将鼠标悬停在伪元素上时使用不透明度以促进过渡:
.image:hover:after {
opacity: 1;
}
在这里结束结果
如果要在悬停时添加文本:
对于最简单的方法,只需将文本添加为伪元素的content
值:
这里的例子
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
这在大多数情况下应该有效;但是,如果您有多个img
元素,您可能不希望在悬停时出现相同的文本。因此,您可以在data-*
属性中设置文本,因此每个img
元素都有唯一的文本。
这里的例子
.image:after {
content: attr(data-content);
color: #fff;
}
值为content
时attr(data-content)
,伪元素添加.image
元素data-content
属性中的文本:
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
您可以添加一些样式并执行以下操作:
这里的例子
在上面的示例中,:after
伪元素用作黑色覆盖层,而:before
伪元素是标题/文本。由于元素彼此独立,因此您可以使用单独的样式以获得更佳的定位。
.image:after, .image:before {
position: absolute;
opacity: 0;
transition: all 0.5s;
-webkit-transition: all 0.5s;
}
.image:after {
content: '\A';
width: 100%; height:100%;
top: 0; left:0;
background:rgba(0,0,0,0.6);
}
.image:before {
content: attr(data-content);
width: 100%;
color: #fff;
z-index: 1;
bottom: 0;
padding: 4px 10px;
text-align: center;
background: #f00;
box-sizing: border-box;
-moz-box-sizing:border-box;
}
.image:hover:after, .image:hover:before {
opacity: 1;
}