Estou tentando adicionar uma sobreposição preta transparente a uma imagem sempre que o mouse está passando sobre a imagem apenas com CSS. Isso é possível? Eu tentei isso:
http://jsfiddle.net/Zf5am/565/
Mas não consigo fazer o div aparecer.
<div class="image">
<img src="http://www.newyorker.com/online/blogs/photobooth/NASAEarth-01.jpg" alt="" />
<div class="overlay" />
</div>
.image {
position: relative;
border: 1px solid black;
width: 200px;
height: 200px;
}
.image img {
max-width: 100%;
max-height: 100%;
}
.overlay {
position: absolute;
top: 0;
left: 0;
display: none;
background-color: red;
z-index: 200;
}
.overlay:hover {
display: block;
}
Respostas:
Eu sugiro usar um pseudoelemento no lugar do elemento de sobreposição. Como os pseudoelementos não podem ser adicionados a
img
elementos incluídos , você ainda precisaria envolver oimg
elemento.EXEMPLO AO VIVO AQUI - EXEMPLO COM TEXTO
Quanto ao CSS, defina dimensões opcionais no
.image
elemento e posicione-o relativamente. Se você está visando uma imagem responsiva, apenas omita as dimensões e ainda funcionará (exemplo) . É apenas importante notar que as dimensões devem estar no elemento pai em oposição aoimg
próprio elemento, ver .Dê ao
img
elemento filho uma largura100%
igual a do pai e adicionevertical-align:top
para corrigir os problemas de alinhamento da linha de base padrão.Quanto ao pseudoelemento, defina um valor de conteúdo e posicione-o absolutamente em relação ao
.image
elemento. Uma largura / altura de100%
garantirá que funcione comimg
dimensões variadas . Se você deseja fazer a transição do elemento, defina uma opacidade de0
e adicione as propriedades / valores de transição.Use uma opacidade de
1
ao passar o mouse sobre o pseudoelemento para facilitar a transição:RESULTADO FINAL AQUI
Se você deseja adicionar texto ao passar o mouse:
Para uma abordagem mais simples, basta adicionar o texto como o
content
valor do pseudoelemento :EXEMPLO AQUI
Isso deve funcionar na maioria dos casos; no entanto, se você tiver mais de um
img
elemento, pode não querer que o mesmo texto apareça ao passar o mouse. Você poderia, portanto, definir o texto em umdata-*
atributo e, portanto, ter um texto exclusivo para cadaimg
elemento.EXEMPLO AQUI
Com um
content
valor deattr(data-content)
, o pseudoelemento adiciona o texto.image
dodata-content
atributo do elemento :Você pode adicionar algum estilo e fazer algo assim:
EXEMPLO AQUI
No exemplo acima, o
:after
pseudo elemento serve como a sobreposição preta, enquanto o:before
pseudo elemento é a legenda / texto. Como os elementos são independentes uns dos outros, você pode usar estilos separados para um posicionamento mais otimizado.fonte
top:30%
funciona, veja meu violino , mas para um layout responsivo, seria bom configurá-lo exatamente no centro. BTW: Obrigado por este agradável anúncio.top: 50%
/transform: translateY(-50%)
para centralização vertical. É uma das abordagens mencionadas nesta outra resposta if mine - stackoverflow.com/questions/5703552/…Filtro CSS3
Embora esse recurso seja implementado apenas no webkit e não seja compatível com o navegador , vale a pena dar uma olhada em:
JSFiddle Demo
Referências
Tópicos semelhantes em SO
fonte
Você estava perto. Isso vai funcionar:
Você precisava colocar a
:hover
imagem, e fazer a.overlay
capa da imagem inteira adicionandoright:0;
ebottom:0
.jsfiddle: http://jsfiddle.net/Zf5am/569/
fonte
Esta é uma boa maneira de usar: depois do div da imagem, em vez do div de sobreposição extra: http://jsfiddle.net/Zf5am/576/
fonte
.overlay
não tem altura ou largura e nenhum conteúdo, e você não pode passar o mouse sobre eladisplay:none
.Em vez disso, dei ao div o mesmo tamanho e posição que
.image
e alterei oRGBA
valor ao pairar.http://jsfiddle.net/Zf5am/566/
fonte
Você pode fazer isso brincando com a opacidade da imagem e definindo a cor de fundo da imagem como preto. Ao tornar a imagem transparente, ela parecerá mais escura.
CSS:
Você pode precisar definir a opacidade específica do navegador também para fazer isso funcionar em outros navegadores também.
fonte
Eu daria uma altura mínima e uma largura mínima para o div de sobreposição do tamanho da imagem e mudaria a cor de fundo ao passar o mouse
fonte
Veja o que fiz aqui: http://jsfiddle.net/dyarbrough93/c8wEC/
Primeiro, você nunca define as dimensões da sobreposição, o que significa que ela não estava aparecendo em primeiro lugar. Em segundo lugar, recomendo apenas alterar o Z-index da sobreposição ao passar o mouse sobre a imagem. Altere a opacidade / cor da sobreposição para atender às suas necessidades.
fonte