Estou tentando usar o :before
seletor para colocar uma imagem sobre outra imagem, mas estou descobrindo que simplesmente não funciona para colocar uma imagem antes de um img
elemento, apenas algum outro elemento. Especificamente, meus estilos são:
.container
{
position: relative;
display: block;
}
.overlay:before
{
content: url(images/[someimage].png);
position: absolute;
left:-20px;
top: -20px;
}
e acho que isso funciona bem:
<a href="[url]" class="container">
<span class="overlay"/>
<img width="200" src="[url]"/>
</a>
mas isso não:
<a href="[url]" class="container">
<img width="200" src="[url]" class="overlay"/>
</a>
Posso usar um elemento div
ou em p
vez disso span
, e o navegador sobrepõe minha imagem corretamente sobre a imagem no img
elemento, mas se eu aplicar a classe de sobreposição a img
ela mesma, ela não funcionará.
Gostaria de fazer isso funcionar porque isso span
me ofende mais, mas o mais importante é que tenho cerca de 100 postagens que gostaria de modificar e posso fazer isso de uma só vez, se puder modificar a folha de estilo, mas se eu tiver que voltar e adicionar um span
elemento extra entre os elementos a
e img
, isso será muito mais trabalhoso.
Respostas:
Infelizmente, a maioria dos navegadores não suporta o uso
:after
ou:before
em tags img.http://lildude.co.uk/after-css-property-for-img-tag
No entanto, é possível realizar o que você precisa com JavaScript / jQuery. Confira este violino:
http://jsfiddle.net/xixonia/ahnGT/
Editar :
Por esse motivo, isso não é suportado, verifique a resposta do coreyward .
fonte
Os pseudo-seletores de antes e depois não inserem elementos HTML - eles inserem texto antes ou depois do conteúdo existente do elemento de destino. Como os elementos de imagem não contêm texto ou têm descendentes, nem
img:before
ouimg:after
vai fazer nenhum bem. Esse também é o caso de elementos como<br>
e<hr>
pelo mesmo motivo.fonte
content: url(/img/foo.jpg);
sintaxe. Consulte w3.org/TR/CSS21/generate.html para obter detalhes.Eu encontrei uma maneira de fazer isso funcionar em css puro:
O método " Eu sou apenas conteúdo falso "
um método CSS puro para habilitar img: after.
Você pode conferir o CodePen: sou apenas um conteúdo falso ou vejo a fonte .
Origem e snippet
Suporte do navegador
✓ Chrome 10 ou superior
✓ Firefox 11 ou superior
✓ Opera 9.8 ou superior
✓ Safari
Sem suporte
⊗ Internet Explorer 8/9
Teste em outros navegadores
fonte
Devido à natureza de
<img>
ser um elemento substituído , o estilo do documento não o afeta.Para referenciá-lo de qualquer maneira,
<picture>
fornece um invólucro nativo ideal que pode ter pseudoelementos anexados a ele, assim:fonte
Aqui está outra solução usando um contêiner div para img enquanto estiver usando
:hover::after
para obter o efeito.O HTML da seguinte maneira:
O CSS da seguinte maneira:
Para vê-lo em ação, confira o violino que eu criei. Só para você saber que isso é compatível com vários navegadores e não há necessidade de enganar o código com 'conteúdo falso'.
fonte
display: inline-block
- se a#img_container
. Isso tornará a largura do contêiner igual à imagem em todos os tamanhos de tela. Portanto, você não acaba tendo:after
conteúdo flutuando fora da imagem.Acho que a melhor maneira de analisar por que isso não funciona é: antes e: depois de inserir o conteúdo antes ou depois do conteúdo na tag à qual você está aplicando. Portanto, ele funciona com divs ou spans (ou com a maioria das outras tags), porque você pode colocar conteúdo dentro delas.
No entanto, um img é uma tag independente e de fechamento automático e, como não possui uma tag de fechamento separada, você não pode colocar nada nela. (Isso precisa parecer
<img>Content</img>
, mas é claro que não funciona.)Sei que esse é um tópico antigo, mas aparece primeiro no Google; espero que isso ajude outras pessoas a aprender.
fonte
Este funciona para mim:
html
CSS
fonte
Os pseudoelementos gerados por :: before e :: after estão contidos na caixa de formatação do elemento e, portanto, não se aplicam a elementos substituídos, como img ou br.
https://developer.mozilla.org/en-US/docs/Web/CSS/::after
fonte
::after
pode ser usado para exibir a imagem de fallback de uma imagemVeja o exemplo abaixo, as duas primeiras
img
tags apontam para os URLs quebrados. Mas o segundo exibe a imagem de fallback em vez do logotipo quebrado padrão do navegador. No entanto, não tenho certeza se isso é prático, acho meio complicado fazê-lo funcionar corretamente.fonte
Experimente este código
fonte
Eu tentei e encontrei um método mais simples para fazer isso. Aqui está o HTML:
O que fiz foi colocar uma
<p>
tag vazia após a minha tag de imagem. Agora usarei p :: before para mostrar a imagem e posicioná-la de acordo com minhas necessidades. Aqui está o CSS:Tente.
fonte
Tente :: after no elemento anterior.
fonte