Estoy tratando de usar el :before
selector para colocar una imagen sobre otra imagen, pero descubro que simplemente no funciona colocar una imagen antes de un img
elemento, solo algún otro elemento. Específicamente, mis estilos son:
.container
{
position: relative;
display: block;
}
.overlay:before
{
content: url(images/[someimage].png);
position: absolute;
left:-20px;
top: -20px;
}
y encuentro que esto funciona bien:
<a href="[url]" class="container">
<span class="overlay"/>
<img width="200" src="[url]"/>
</a>
pero esto no:
<a href="[url]" class="container">
<img width="200" src="[url]" class="overlay"/>
</a>
Puedo usar un elemento div
o en p
lugar de eso span
, y el navegador superpone correctamente mi imagen sobre la imagen en el img
elemento, pero si aplico la clase de superposición a laimg
sí mismo, no funciona.
Me gustaría que esto funcione porque eso span
me ofende, pero lo más importante es que tengo alrededor de 100 publicaciones de blog que me gustaría modificar, y puedo hacerlo de una vez si solo pudiera modificar la hoja de estilo, pero si tengo que regresar y agregar un span
elemento adicional entre los elementos a
y img
, esto será mucho más trabajo.
Respuestas:
Desafortunadamente, la mayoría de los navegadores no admiten el uso
:after
o:before
en etiquetas img.http://lildude.co.uk/after-css-property-for-img-tag
Sin embargo, ES posible que logre lo que necesita con JavaScript / jQuery. Mira este violín:
http://jsfiddle.net/xixonia/ahnGT/
Editar :
Por la razón por la cual esto no es compatible, consulte la respuesta de coreyward .
fuente
Los pseudo-selectores antes y después no insertan elementos HTML: insertan texto antes o después del contenido existente del elemento objetivo. Debido a que los elementos de imagen no contienen texto o tener descendencia, ni
img:before
oimg:after
no le hará ningún bien. Este es también el caso de elementos como<br>
y<hr>
por la misma razón.fuente
content: url(/img/foo.jpg);
sintaxis. Consulte w3.org/TR/CSS21/generate.html para obtener más detalles.Encontré una manera de hacer que esto funcione en css puro:
El método solo soy contenido falso
un método CSS puro para habilitar img: after.
Puede consultar CodePen: solo soy contenido falso o ver la fuente .
Fuente y fragmento
Soporte del navegador
✓ Chrome 10+
✓ Firefox 11+
✓ Opera 9.8+
✓ Safari
Sin soporte
⊗ Internet Explorer 8/9
Por favor, pruebe en otros navegadores
fuente
Debido a la naturaleza de
<img>
ser un elemento reemplazado , el estilo del documento no lo afecta.Para referenciarlo de todos modos,
<picture>
proporciona un contenedor nativo ideal que puede tener pseudoelementos adjuntos, de esta manera:fuente
Aquí hay otra solución que usa un contenedor div para img mientras se usa
:hover::after
para lograr el efecto.El HTML de la siguiente manera:
El CSS de la siguiente manera:
Para verlo en acción, mira el violín que he creado. Solo para que sepa que esto es compatible con el navegador cruzado y no hay necesidad de engañar al código con 'contenido falso'.
fuente
display: inline-block
a#img_container
. Eso hará que el ancho del contenedor sea igual a la imagen en todos los tamaños de pantalla. Entonces, no terminas teniendo:after
contenido flotando fuera de la imagen.Creo que la mejor manera de ver por qué esto no funciona es eso: antes y después de insertar su contenido antes o después del contenido dentro de la etiqueta a la que los está aplicando. Por lo tanto, funciona con divs o spans (o la mayoría de las otras etiquetas) porque puede poner contenido dentro de ellos.
Sin embargo, un img es una etiqueta auto-contenida y de cierre automático, y dado que no tiene una etiqueta de cierre separada, no puede poner nada dentro de ella. (Eso tendría que verse como
<img>Content</img>
, pero por supuesto eso no funciona).Sé que este es un tema antiguo, pero aparece primero en Google, por lo que espero que esto ayude a otros a aprender.
fuente
Esta funciona para mí:
html
CSS
fuente
Los pseudoelementos generados por :: before y :: after están contenidos en el cuadro de formato del elemento y, por lo tanto, no se aplican a elementos reemplazados como img o br.
https://developer.mozilla.org/en-US/docs/Web/CSS/::after
fuente
::after
se puede usar para mostrar la imagen alternativa de una imagenVea el ejemplo a continuación, las primeras 2
img
etiquetas apuntan a las URL rotas. Pero el segundo muestra la imagen alternativa en lugar del logotipo roto predeterminado del navegador. Sin embargo, no estoy seguro de que esto sea práctico, me resulta un poco complicado hacer que funcione correctamente.fuente
Prueba este código
fuente
Intenté y encontré un método más simple para hacerlo. Aquí está el HTML:
Lo que hice fue colocar una
<p>
etiqueta vacía después de mi etiqueta de imagen. Ahora usaré p :: antes para mostrar la imagen y posicionarla de acuerdo a mis necesidades. Aquí está el CSS:Intentalo.
fuente
Pruebe :: después en el elemento anterior.
fuente