Ich versuche, mit dem :before
Selektor ein Bild über einem anderen Bild zu platzieren, aber ich stelle fest, dass es einfach nicht funktioniert, ein Bild vor einem img
Element zu platzieren, sondern nur vor einem anderen Element. Insbesondere sind meine Stile:
.container
{
position: relative;
display: block;
}
.overlay:before
{
content: url(images/[someimage].png);
position: absolute;
left:-20px;
top: -20px;
}
und ich finde, dass dies gut funktioniert:
<a href="[url]" class="container">
<span class="overlay"/>
<img width="200" src="[url]"/>
</a>
aber das geht nicht:
<a href="[url]" class="container">
<img width="200" src="[url]" class="overlay"/>
</a>
Ich kann stattdessen ein div
oder p
-Element verwenden span
, und der Browser überlagert mein Bild korrekt mit dem Bild im img
Element. Wenn ich die Overlay-Klasse jedoch auf sich img
selbst anwende , funktioniert dies nicht.
Ich würde das gerne zum Laufen bringen, weil span
mich das zusätzlich beleidigt, aber was noch wichtiger ist, ich habe ungefähr 100 Blog-Beiträge, die ich ändern möchte, und ich kann dies auf einmal tun, wenn ich nur das Stylesheet ändern könnte. aber wenn ich zurück zu gehen und fügen Sie ein zusätzliches span
Element zwischen den a
und img
Elementen, wird dies viel mehr Arbeit sein.
Antworten:
Leider unterstützen die meisten Browser die Verwendung von
:after
oder:before
für img-Tags nicht.http://lildude.co.uk/after-css-property-for-img-tag
Mit JavaScript / jQuery können Sie jedoch das erreichen, was Sie benötigen. Schauen Sie sich diese Geige an:
http://jsfiddle.net/xixonia/ahnGT/
Bearbeiten :
Lesen Sie die Antwort von coreyward , um herauszufinden, warum dies nicht unterstützt wird .
quelle
Die Vorher- und Nachher-Pseudoselektoren fügen keine HTML-Elemente ein - sie fügen Text vor oder nach dem vorhandenen Inhalt des Zielelements ein. Da Bildelemente enthalten keinen Text oder haben Nachkommen, weder
img:before
oderimg:after
werden Sie etwas Gutes tun. Dies gilt auch für Elemente wie<br>
und<hr>
aus demselben Grund.quelle
content: url(/img/foo.jpg);
Syntax verwenden. Weitere Informationen finden Sie unter w3.org/TR/CSS21/generate.html .Ich habe einen Weg gefunden, diese Arbeit in reinem CSS zu machen:
Der Ich bin nur gefälschter Inhalt -Methode
eine reine CSS-Methode, um img: after zu aktivieren.
Sie können den CodePen überprüfen : Ich bin nur gefälschter Inhalt oder sehe die Quelle .
Quelle & Snippet
Browser-Unterstützung
✓ Chrome 10+
✓ Firefox 11+
✓ Opera 9.8+
✓ Safari
Keine Unterstützung
⊗ Internet Explorer 8/9
Bitte testen Sie in anderen Browsern
quelle
Aufgrund der Art
<img>
, ein ersetztes Element zu sein , hat das Dokument-Styling keinen Einfluss darauf.Um es trotzdem zu referenzieren,
<picture>
bietet es einen idealen, nativen Wrapper, an den Pseudoelemente angehängt werden können, wie folgt:quelle
Hier ist eine andere Lösung, bei der ein div-Container für img verwendet wird
:hover::after
, um den Effekt zu erzielen.Der HTML wie folgt:
Das CSS wie folgt:
Schauen Sie sich die Geige an, die ich erstellt habe , um sie in Aktion zu sehen . Nur damit Sie wissen, dass dies browserübergreifend ist und Sie den Code nicht mit "gefälschten Inhalten" austricksen müssen.
quelle
display: inline-block
auf#img_container
. Dadurch entspricht die Breite des Containers bei allen Bildschirmgrößen dem Bild. Sie haben also keinen:after
Inhalt, der außerhalb des Bildes schwebt.Ich denke, der beste Weg, um herauszufinden, warum dies nicht funktioniert, ist folgender: vor und nach dem Einfügen des Inhalts vor oder nach dem Inhalt des Tags, auf das Sie sie anwenden. Es funktioniert also mit Divs oder Spans (oder den meisten anderen Tags), da Sie Inhalte in diese einfügen können.
Ein img ist jedoch ein in sich geschlossenes, sich selbst schließendes Tag. Da es kein separates schließendes Tag enthält, können Sie nichts darin einfügen. (Das müsste so aussehen
<img>Content</img>
, aber das funktioniert natürlich nicht.)Ich weiß, dass dies ein altes Thema ist, aber es taucht zuerst bei Google auf. Hoffentlich hilft dies anderen beim Lernen.
quelle
Dieser funktioniert für mich:
html
CSS
quelle
Die von :: before und :: after generierten Pseudoelemente sind im Formatierungsfeld des Elements enthalten und gelten daher nicht für ersetzte Elemente wie img oder br-Elemente.
https://developer.mozilla.org/en-US/docs/Web/CSS/::after
quelle
::after
kann verwendet werden, um das Fallback-Bild eines Bildes anzuzeigenIm folgenden Beispiel zeigen die ersten
img
beiden Tags auf die fehlerhaften URLs. Das zweite zeigt jedoch das Fallback-Bild anstelle des standardmäßig defekten Logos des Browsers an. Ich bin mir jedoch nicht sicher, ob dies praktikabel ist. Ich finde es schwierig, es richtig zum Laufen zu bringen.quelle
Versuchen Sie diesen Code
quelle
Ich habe versucht, eine einfachere Methode zu finden. Hier ist der HTML:
Ich habe ein leeres
<p>
Tag nach meinem Bild-Tag platziert. Jetzt werde ich p :: before verwenden, um das Bild anzuzeigen und es gemäß meinen Anforderungen zu positionieren. Hier ist das CSS:Versuch es.
quelle
Versuchen Sie :: after für das vorherige Element.
quelle