J'essaie d'utiliser le :before
sélecteur pour placer une image sur une autre image, mais je trouve que cela ne fonctionne tout simplement pas de placer une image avant un img
élément, seulement un autre élément. Plus précisément, mes styles sont:
.container
{
position: relative;
display: block;
}
.overlay:before
{
content: url(images/[someimage].png);
position: absolute;
left:-20px;
top: -20px;
}
et je trouve que cela fonctionne bien:
<a href="[url]" class="container">
<span class="overlay"/>
<img width="200" src="[url]"/>
</a>
mais cela ne signifie pas:
<a href="[url]" class="container">
<img width="200" src="[url]" class="overlay"/>
</a>
Je peux utiliser un élément div
ou à la p
place de cela span
, et le navigateur superpose correctement mon image sur l'image de l' img
élément, mais si j'applique la classe de superposition à img
lui - même, cela ne fonctionne pas.
J'aimerais que cela fonctionne parce que cela span
me choque, mais plus important encore, j'ai environ 100 articles de blog que je voudrais modifier, et je peux le faire en une seule fois si je pouvais simplement modifier la feuille de style, mais si je dois revenir en arrière et ajouter un span
élément supplémentaire entre les éléments a
et img
, ce sera beaucoup plus de travail.
Réponses:
Malheureusement, la plupart des navigateurs ne prennent pas en charge l'utilisation
:after
ou:before
les balises img.http://lildude.co.uk/after-css-property-for-img-tag
Cependant, il vous est possible d'accomplir ce dont vous avez besoin avec JavaScript / jQuery. Découvrez ce violon:
http://jsfiddle.net/xixonia/ahnGT/
Modifier :
Pour la raison pour laquelle cela n'est pas pris en charge, consultez la réponse de coreyward .
la source
Les pseudo-sélecteurs avant et après n'insèrent pas d'éléments HTML - ils insèrent du texte avant ou après le contenu existant de l'élément ciblé. Parce que les éléments d'image ne contiennent pas de texte ou n'ont pas de descendants, ni l'un
img:before
niimg:after
l'autre ne vous seront utiles. C'est également le cas pour des éléments comme<br>
et<hr>
pour la même raison.la source
content: url(/img/foo.jpg);
syntaxe. Voir w3.org/TR/CSS21/generate.html pour les détails.J'ai trouvé un moyen de faire ce travail en css pur:
La méthode I'm just fake content
une méthode CSS pure pour activer img: after.
Vous pouvez consulter le CodePen: je suis juste un faux contenu ou voir la source .
Source et extrait
Prise en charge du navigateur
✓ Chrome 10+
✓ Firefox 11+
✓ Opera 9.8+
✓ Safari
Pas de support
⊗ Internet Explorer 8/9
Veuillez tester dans d'autres navigateurs
la source
En raison de la nature d'
<img>
un élément remplacé , le style du document ne l'a pas affecté.Pour le référencer de toute façon,
<picture>
fournit un wrapper natif idéal qui peut être attaché à des pseudo-éléments, comme ceci:la source
Voici une autre solution utilisant un conteneur div pour img lors de l'utilisation
:hover::after
pour obtenir l'effet.Le HTML comme suit:
Le CSS comme suit:
Pour le voir en action, consultez le violon que j'ai créé. Juste pour que vous sachiez que cela est compatible avec tous les navigateurs et qu'il n'est pas nécessaire de tromper le code avec un «faux contenu».
la source
display: inline-block
à#img_container
. Cela rendra la largeur du conteneur égale à l'image à toutes les tailles d'écran. Ainsi, vous ne finissez pas par avoir du:after
contenu flottant en dehors de l'image.Je pense que la meilleure façon de comprendre pourquoi cela ne fonctionne pas est que: avant et: après avoir inséré leur contenu avant ou après le contenu de la balise à laquelle vous les appliquez. Cela fonctionne donc avec des divs ou des étendues (ou la plupart des autres balises) car vous pouvez y mettre du contenu.
Cependant, un img est une balise à fermeture automatique, et comme il n'a pas de balise de fermeture séparée, vous ne pouvez rien y mettre. (Cela devrait ressembler
<img>Content</img>
, mais bien sûr, cela ne fonctionne pas.)Je sais que c'est un vieux sujet, mais il apparaît d'abord sur Google, donc j'espère que cela aidera les autres à apprendre.
la source
Celui-ci fonctionne pour moi:
html
CSS
la source
Les pseudo-éléments générés par :: avant et :: après sont contenus dans la boîte de mise en forme de l'élément, et ne s'appliquent donc pas aux éléments remplacés tels que img ou aux éléments br.
https://developer.mozilla.org/en-US/docs/Web/CSS/::after
la source
::after
peut être utilisé pour afficher l'image de secours d'une imageVoir l'exemple ci-dessous, les 2 premières
img
balises pointent vers les URL cassées. Mais le second affiche l'image de secours au lieu du logo cassé par défaut du navigateur. Cependant, je ne suis pas sûr que ce soit pratique, je trouve ça un peu difficile à faire fonctionner correctement.la source
Essayez ce code
la source
J'ai essayé et trouvé une méthode plus simple pour le faire. Voici le HTML:
J'ai placé une
<p>
balise vide après ma balise d'image. Maintenant, je vais utiliser p :: before pour afficher l'image et la positionner en fonction de mes besoins. Voici le CSS:Essayez-le.
la source
Essayez :: after sur l'élément précédent.
la source