Sugeriría usar un pseudo elemento en lugar del elemento de superposición. Debido a que los pseudoelementos no se pueden agregar en imgelementos adjuntos , aún necesitaría envolver el imgelemento.
EJEMPLO EN VIVO AQUÍ - EJEMPLO CON TEXTO
<div class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
En cuanto al CSS, establezca dimensiones opcionales en el .imageelemento y colóquelo relativamente. Si está apuntando a una imagen receptiva, simplemente omita las dimensiones y esto seguirá funcionando (ejemplo) . Vale la pena señalar que solo las dimensiones deben estar en el elemento primario en comparación con el imgelemento en sí, ver .
.image {
position: relative;
width: 400px;
height: 400px;
}
Asigne al imgelemento secundario un ancho del 100%principal y agregue vertical-align:toppara solucionar los problemas de alineación de la línea de base predeterminada.
.image img {
width: 100%;
vertical-align: top;
}
En cuanto al pseudo elemento, establezca un valor de contenido y colóquelo absolutamente en relación con el .imageelemento. Un ancho / alto 100%asegurará que esto funcione con diferentes imgdimensiones. Si desea realizar la transición del elemento, establezca una opacidad 0y agregue las propiedades / valores de transición.
.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;
}
Utilice una opacidad de 1al pasar el cursor sobre el pseudo elemento para facilitar la transición:
.image:hover:after {
opacity: 1;
}
FINALIZAR EL RESULTADO AQUÍ
Si desea agregar texto al pasar el mouse:
Para el enfoque más simple, simplemente agregue el texto como el contentvalor del pseudo elemento :
EJEMPLO AQUÍ
.image:after {
content: 'Here is some text..';
color: #fff;
/* Other styling.. */
}
Eso debería funcionar en la mayoría de los casos; sin embargo, si tiene más de un imgelemento, es posible que no desee que aparezca el mismo texto al desplazarse. Por lo tanto, podría establecer el texto en un data-*atributo y, por lo tanto, tener un texto único para cada imgelemento.
EJEMPLO AQUÍ
.image:after {
content: attr(data-content);
color: #fff;
}
Con un contentvalor de attr(data-content), el pseudo elemento agrega el texto .imagedel data-contentatributo del elemento :
<div data-content="Text added on hover" class="image">
<img src="http://i.stack.imgur.com/Sjsbh.jpg" alt="" />
</div>
Puede agregar un poco de estilo y hacer algo como esto:
EJEMPLO AQUÍ
En el ejemplo anterior, el :afterpseudo elemento sirve como superposición negra, mientras que el :beforepseudo elemento es el título / texto. Dado que los elementos son independientes entre sí, puede utilizar estilos separados para un posicionamiento más óptimo.
.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;
}