Ich möchte einem Auswahlfeld mit dem Pseudo: after einen Stil hinzufügen (um mein Auswahlfeld mit 2 Teilen und ohne Bilder zu formatieren). Hier ist der HTML:
<select name="">
<option value="">Test</option>
</select>
Und es funktioniert nicht. Ich weiß nicht warum und habe die Antwort in den W3C-Spezifikationen nicht gefunden. Hier ist das CSS:
select {
-webkit-appearance: none;
background: black;
border: none;
border-radius: 0;
color: white;
}
select:after {
content: " ";
display: inline-block;
width: 24px; height: 24px;
background: blue;
}
Ist es also normal oder gibt es einen Trick?
Antworten:
Ich habe dies nicht ausführlich überprüft, aber ich habe den Eindruck, dass dies (noch?) Nicht möglich ist, da
select
Elemente vom Betriebssystem generiert werden, auf dem der Browser ausgeführt wird, und nicht vom Browser selbst.quelle
Ich habe nach dem gleichen gesucht, da der Hintergrund meiner Auswahl mit der Pfeilfarbe übereinstimmt. Wie bereits erwähnt, ist es noch unmöglich, mit: before oder: after ein ausgewähltes Element hinzuzufügen. Meine Lösung bestand darin, ein Wrapper-Element zu erstellen, zu dem ich Folgendes hinzufügte: vor dem Code.
Und das ist meine Auswahl
Ich habe FontAwesome.io für meinen neuen Pfeil verwendet, aber Sie können alles verwenden, was Sie möchten. Natürlich ist dies keine perfekte Lösung, aber je nach Ihren Anforderungen kann es ausreichen.
quelle
Nach meiner Erfahrung funktioniert es einfach nicht, es sei denn, Sie sind bereit, Ihre
<select>
in eine Hülle zu wickeln . Sie können jedoch stattdessen SVG mit Hintergrundbild verwenden. Z.BSeien Sie wegen des IE nur vorsichtig mit der richtigen URL-Codierung. Sie müssen
charset=utf8
(nicht nurutf8
) verwenden, keine doppelten Anführungszeichen (") verwenden, um SVG-Attributwerte abzugrenzen, stattdessen Apostrophe (') verwenden, um Ihr Leben zu vereinfachen. URL-Codierung (% 3E). Falls Sie drucken müssen Alle Nicht-ASCII-Zeichen, die Sie benötigen, um ihre UTF-8-Darstellung zu erhalten (z. B. BabelMap kann Ihnen dabei helfen) und diese Darstellung dann in URL-codierter Form bereitstellen - z. B. für UT (U+25BE
BLACK DOWN-POINTING SMALL TRIANGLE) UTF-8-Darstellung\xE2\x96\xBE
Das ist,%E2%96%BE
wenn URL-codiert.quelle
Dieser Beitrag kann hilfreich sein http://bavotasan.com/2011/style-select-box-using-only-css/
Er verwendet ein externes Div mit einer Klasse, um dieses Problem zu lösen.
quelle
Konnte das gleiche Problem. Wahrscheinlich könnte es eine Lösung sein:
quelle
Diese Lösung ähnelt der von sroy, jedoch mit CSS-Dreieck anstelle von Web-Schriftart:
quelle
Was ist, wenn das Ändern des Markups keine Option ist?
Hier ist eine Lösung, die keine Anforderungen an einen Wrapper stellt: Sie verwendet eine SVG in einem Hintergrundbild. Möglicherweise müssen Sie einen HTML-Entitätsdecoder verwenden, um zu verstehen, wie die Füllfarbe geändert wird.
Von CSS-Tricks gekniffen .
quelle
Dies ist eine moderne Lösung, die ich mit font-awesome erfunden habe . Herstellererweiterungen wurden der Kürze halber weggelassen.
HTML
SCSS
Wenn Ihr Auswahlelement eine definierte Hintergrundfarbe hat, funktioniert dies nicht, da dieses Snippet im Wesentlichen das Chevron-Symbol hinter dem Auswahlelement platziert (damit Sie durch Klicken auf das Symbol weiterhin die Auswahlaktion starten können).
Sie können den Select-Wrapper jedoch auf dieselbe Größe wie das Select-Element und seinen Hintergrund formatieren, um den gleichen Effekt zu erzielen.
In meinem CodePen finden Sie eine funktionierende Demo, in der dieser Code sowohl in einem dunklen als auch in einem hellen Auswahlfeld mit einem regulären Etikett und einem "Platzhalter" -Label sowie anderen bereinigten Stilen wie Rahmen und Breiten angezeigt wird.
PS Dies ist eine Antwort, die ich Anfang dieses Jahres auf eine andere, doppelte Frage gestellt hatte.
quelle
Wenn Sie die Auswahl gestylt haben, fügen Sie außerhalb der Auswahl kein Div hinzu.
und dann in CSS stylen
quelle