Angenommen, ich möchte Links zu bestimmten Dateitypen mithilfe eines Bildes dekorieren. Ich könnte meine Links als deklarieren
<a href='foo.pdf' class='pdflink'>A File!</a>
dann habe CSS wie
.pdflink:after { content: url('/images/pdf.png') }
Das funktioniert jetzt großartig, außer wenn pdf.png
es nicht die richtige Größe für meinen Linktext hat.
Ich möchte dem Browser mitteilen können, dass er das :after
Bild skalieren soll , aber ich kann für mein ganzes Leben nicht die richtige Syntax finden. Oder ist dies wie bei Hintergrundbildern, bei denen eine Größenänderung einfach nicht möglich ist?
ETA: Ich neige dazu, entweder a) das Quellbild auf die "richtige" Größe zu ändern, serverseitig und / oder b) das Markup zu ändern, um einfach ein IMG-Tag inline bereitzustellen. Ich habe versucht, diese beiden Dinge zu vermeiden, aber sie klingen so, als wären sie kompatibler als der Versuch, Dinge nur mit CSS zu tun. Die Antwort auf meine ursprüngliche Frage scheint zu lauten: " Manchmal kann man das irgendwie tun."
quelle
Antworten:
Das Einstellen
background-size
ist zulässig. Sie müssen jedoch weiterhin die Breite und Höhe des Blocks angeben.Siehe die vollständige Kompatibilitätstabelle im MDN .
quelle
:after
. Es wird unter IE8 nicht unterstützt.width: 10px; height: 20px;
, um das Bild zu sehen.background-image
Eigenschaft, das Einfachebackground
wird nicht funktionieren.:before
) brauchte ich auchposition: absolute
undleft: -10px
.Beachten Sie, dass das
:after
Pseudoelement eine Box ist, die wiederum das generierte Bild enthält. Es gibt keine Möglichkeit, das Bild zu formatieren, aber Sie können die Box formatieren.Das Folgende ist nur eine Idee, und die obige Lösung ist praktischer.
http://jsfiddle.net/Nwupm/
Nachteile: Sie müssen die intrinsischen Abmessungen des Bildes kennen und es bleibt Ihnen ein Leerzeichen, das ich am Geldautomaten nicht loswerden kann.
quelle
position: absolute
, umtransform: scale(0.5)
tatsächlich arbeiten zu können. Ich musste auchposition: relative
das "Eltern" -Element (den Besitzer des:after
Pseudos) für die Vernunft einfügen. Außerdem musste ichtranslate(-16px, -16px)
meine Transformation ergänzen , um das 16x16-Symbol korrekt zu positionieren. Dasposition: absolute
hat auch den Vorteil , dass das Leer Problem zu beseitigen.Da meine andere Antwort offensichtlich nicht gut verstanden wurde, ist hier ein zweiter Versuch:
Es gibt zwei Ansätze, um die Frage zu beantworten.
Praktisch (zeig mir einfach das verdammte Bild!)
Vergessen Sie den
:after
Pseudo-Selektor und entscheiden Sie sich für so etwasTheoretisch
Die Frage ist: Können Sie generierte Inhalte stylen ? Die Antwort lautet: Nein, das kannst du nicht. Es gab eine lange Diskussion über die W3C-Mailingliste zu diesem Thema, aber bisher keine Lösung.
Generierter Inhalt wird in eine generierte Box gerendert, und Sie können diese Box formatieren, jedoch nicht den Inhalt als solchen . Verschiedene Browser zeigen ein sehr unterschiedliches Verhalten
(von http://lists.w3.org/Archives/Public/www-style/2011Nov/0451.html )
In ähnlicher Weise zeigen Browser sehr unterschiedliche Ergebnisse bei Dingen wie http://jsfiddle.net/Nwupm/1/ , bei denen mehr als ein Element generiert wird. Beachten Sie, dass sich CSS3 noch in einem frühen Entwicklungsstadium befindet und dieses Problem noch nicht gelöst ist.
quelle
Sie sollten Hintergrund anstelle von Bild verwenden.
quelle
diplay: block;
haben keine Wirkungpositionin funktioniert auch sehr seltsam, wenn es um Frontend-Grundlagen geht. Seien Sie also vorsichtig
quelle
Hier ist eine andere (funktionierende) Lösung: Ändern Sie einfach die Größe Ihrer Bilder auf die gewünschte Größe :)
Sie benötigen pdf.png, um 20px * 10px zu sein, damit dies funktioniert. Die 20px / 10px in der CSS sind hier, um die Größe des Blocks anzugeben, damit die Elemente, die nach dem Block kommen, nicht alle mit dem Bild durcheinander gebracht werden
Vergessen Sie nicht, eine Kopie des Rohbilds in der Originalgröße aufzubewahren
quelle
quelle
Sie können die
zoom
Eigenschaft verwenden. Überprüfen Sie diese jsfiddlequelle
Sie können die Höhe oder Breite des Vorher- oder Nachher- Elements folgendermaßen ändern :
quelle
Ich habe diese Breite für die Schriftgrößensteuerung verwendet
quelle
Heutzutage können Sie mit flexbox Ihren Code erheblich vereinfachen und nur 1 Parameter nach Bedarf anpassen:
Jetzt können Sie einfach die Breite des Elements anpassen und die Höhe wird automatisch angepasst. Erhöhen / verringern Sie die Breite, bis die Höhe des Elements die gewünschte Anzahl erreicht.
quelle
url(//placeimg.com/800/200/arch)
quelle