Sugeriría usar un pseudo elemento en lugar del elemento de superposición. Debido a que los pseudoelementos no se pueden agregar en img
elementos adjuntos , aún necesitaría envolver el img
elemento.
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 .image
elemento 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 img
elemento en sí, ver .
.image {
position: relative;
width: 400px;
height: 400px;
}
Asigne al img
elemento secundario un ancho del 100%
principal y agregue vertical-align:top
para 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 .image
elemento. Un ancho / alto 100%
asegurará que esto funcione con diferentes img
dimensiones. Si desea realizar la transición del elemento, establezca una opacidad 0
y 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 1
al 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 content
valor 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 img
elemento, 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 img
elemento.
EJEMPLO AQUÍ
.image:after {
content: attr(data-content);
color: #fff;
}
Con un content
valor de attr(data-content)
, el pseudo elemento agrega el texto .image
del data-content
atributo 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 :after
pseudo elemento sirve como superposición negra, mientras que el :before
pseudo 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;
}