DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Das ::placeholder Pseudo-Element (oder in manchen Fällen eine Pseudo-Klasse, je nach Browser-Implementierung) ermöglicht es Ihnen, den Platzhaltertext eines Formularelements zu gestalten. Und zwar den Text, der mit dem placeholder-Attribut gesetzt wurde.
<input type="email" placeholder="[email protected]">
Sie können diesen Text in den meisten Browsern mit dieser Mischung aus herstellerspezifischen Präfixen gestalten.
::-webkit-input-placeholder { /* Chrome/Opera/Safari */
color: pink;
}
::-moz-placeholder { /* Firefox 19+ */
color: pink;
}
:-ms-input-placeholder { /* IE 10+ */
color: pink;
}
:-moz-placeholder { /* Firefox 18- */
color: pink;
}
Wichtiger Hinweis: Diese Syntax ist nicht standardisiert, daher die ganze Namens-Wirrwarr. Sie kommt in der Spezifikation überhaupt nicht vor. :placeholder-shown ist standardisiert, und selbst Spezifikationsautoren scheinen zu denken, dass ::placeholder die standardisierte Version sein wird.
Wie bei jedem Pseudo können Sie es bei Bedarf auf bestimmte Elemente anwenden, wie z. B.:
input[type="email"].big-dog::-webkit-input-placeholder {
color: orange;
}
Demo
Der Unterschied zwischen :placeholder-shown und ::placeholder
:placeholder-shown dient dazu, das Eingabeelement auszuwählen, wenn sein Platzhaltertext angezeigt wird. Im Gegensatz zu ::placeholder, das den Platzhaltertext gestaltet.
Hier ist eine Grafik

Ich fand das sehr verwirrend, da
- die Spezifikationen nur
:placeholder-shownund nicht::placeholderenthalten. :placeholder-shownkann immer noch die Gestaltung des Platzhaltertextes beeinflussen, da es ein Elternelement ist (z. B. Schriftgröße).
Beachten Sie, dass :placeholder-shown eine Pseudo-Klasse ist (ein Element in einem bestimmten Zustand) und ::placeholder ein Pseudo-Element (ein sichtbares Ding, das nicht wirklich im DOM ist). Unterscheidbar durch ein- oder doppelten Doppelpunkt.
Tab Atkins hat es mir per E-Mail erklärt.
:placeholder-shown, als Pseudoklasse, muss ein existierendes Element auswählen – es wählt die Eingabe aus, wann immer Sie sich im Platzhalter-Anzeigemodus befinden. Das ::placeholder Pseudoelement umschließt den eigentlichen Platzhaltertext.
Element oder Klasse?
Diese Funktionalität ist nicht standardisiert. Das bedeutet, dass jeder Browser eine andere Vorstellung davon hat, wie sie funktionieren soll.
Firefox hat dies ursprünglich als Pseudoklasse implementiert, hat es aber aus einigen Gründen geändert. Um es kurz zu machen, mit einer Pseudoklasse kann man nicht so viel machen.
Wenn Sie zum Beispiel die Textfarbe ändern möchten, wenn das Eingabefeld fokussiert ist. Sie würden einen Selektor wie input:focus::placeholder verwenden, was mit einer Pseudoklasse nicht möglich wäre (sie stapeln sich nicht auf dieselbe Weise).
IE10 unterstützt dies als Pseudoklasse anstelle eines Elements. Alle anderen haben ein Pseudoelement implementiert.
Firefox Platzhalterfarbe
Sie werden vielleicht bemerken, wie die Farbe des Platzhalters in Firefox verblasst aussieht im Vergleich zu anderen Browsern. Im Bild unten ist Firefox 43 links und Chrome 47 rechts dargestellt.

Das liegt daran, dass standardmäßig allen Platzhaltern in Firefox ein Opazitätswert zugewiesen wird. Um dies zu beheben, müssen wir diesen Wert zurücksetzen.
::-moz-placeholder {
opacity: 1;
}
Mehr dazu erfahren Sie, indem Sie diese Demo in Firefox testen.
Unterstützte Stile
Das Pseudoelement unterstützt die Gestaltung dieser Eigenschaften
font-Eigenschaftencolorbackground-Eigenschaftenword-spacingletter-spacingtext-decorationvertical-aligntext-transformline-heighttext-indentopacity
Die Pseudoklasse unterstützt ebenfalls die meisten (wenn nicht alle) dieser Eigenschaften, ist aber aus den oben genannten Gründen nicht so flexibel.
Browser-Unterstützung
Diese Browser-Supportdaten stammen von Caniuse, das mehr Details enthält. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 57 | 19* | Nein | 79 | 10.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 10.3 |
Weitere Ressourcen
- MDN Docs
- „Das CSS3 Placeholder Pseudo-Element“ von Guil Hernandez
- „Styling HTML placeholder attribute“ von Mounir Lamouri
- „Styling Placeholders“ von Tab Atkins
input{text-align:left}
::-moz-placeholder, :-moz-placeholder {text-align:right !important;}
Aber „text-align:right“ funktioniert nicht!
Text-align wird im Moment nicht unterstützt.
Sie können das lösen, indem Sie
// das wäre meiner Meinung nach besser
::placeholder:read{}
:placeholder:write{}
Einige Browser (getestet mit Firefox) verwenden Opazität für Platzhalter. Wenn Sie also die Farbe nur mit der
color-Eigenschaft steuern möchten, vergessen Sie nicht, auchopacity: 1zu setzen.Hallo Hakan, ich hatte gerade Schwierigkeiten mit Firefox und Ihr Kommentar hat mein Problem gelöst, vielen Dank!
Rob
Oh mein Gott, danke Håkan! Ich war genauso ratlos.
Vielen Dank!
Nach 3 Jahren hast du mein Leben gerettet, ahahah danke Mann.
Außerdem ist es wichtig, jede Deklaration als separate Deklaration zu verwenden, wie in diesem Artikel, und nicht so
danke ;)
Entschuldigung, ich möchte wissen, warum es wichtig ist, jede Deklaration separat zu verwenden und nicht alle zusammen?
Es wird nicht funktionieren, wenn Sie es alles zusammen schreiben. Ich habe es versucht.
Danke Ruslan!
Danke! Ich habe tagelang damit gekämpft. Du hast mir gerade Kopfschmerzen genommen.
Versuchen Sie dieses Beispiel
Meine Frage ist, wie man den Platzhaltertext in einem Textfeld für Safari zentriert ausrichtet. Ich habe es sowohl im mobilen als auch im Desktop-Browser versucht. Er ist nur linksbündig.
Bitte lassen Sie es mich wissen, wenn jemand Bescheid weiß.
Wie kann ich in diesem Code das E-Mail-Formular links und den Platzhalter rechts ausrichten?
Probieren Sie dies
Definition von Platzhalter
@Mohit Pilania
text-alignwird nicht von allen Browsern unterstützt.Stattdessen
Hat jemand ein Problem in älteren Versionen von Opera erlebt, bei dem der Platzhalter rechts ausgerichtet ist???
Gibt es eine Möglichkeit, dieses Problem zu beheben, wenn „text-align“ nicht unterstützt wird?
text-indent wird in Chrome Mobile nicht unterstützt.
Siehe hier http://stackoverflow.com/questions/21594026/placeholder-always-align-left-in-safari
placeholder + text-indent funktioniert nicht im Android Browser (4.2), wer hat eine Lösung?
Platzhaltertextproblem im IE-Browser, wie kann ich das lösen?
Ich benutze bereits den folgenden Code
:-ms-input-placeholder{color:#999;}
aber er funktioniert nicht in meinem IE-Browser.
@font-face funktioniert nicht im IE9-Browser, wie kann ich das lösen?
Ich benutze bereits den unten angegebenen Code für mein Projekt
@font-face{font-family:”OpenSans-Regular”; src:url(‘../new_font/OpenSans-Regular.ttf’) format(‘truetype’); src:url(‘../new_font/OpenSans-Regular.ttf?#iefix’) format(‘truetype’);}
Wie zentriert man das Wasserzeichen der Eingabefeld-Platzhalter im Safari-Browser 5.1.7?
Das scheint in Chrome auf iOS nicht zu funktionieren?
Verwenden Sie die CSS-Eigenschaft direction, um den Platzhalterinhalt nach rechts zu verschieben.
Vielen Dank.
Der Link „testing this demo out in Firefox.“ am Ende ist defekt.
6 Monate später und er ist immer noch kaputt..
Hier ist der richtige: http://codepen.io/team/css-tricks/pen/36c9b95c815e9c96e31d1d28ea6f8224?editors=110
Toller Beitrag, weiter so. Danke!
Gibt es eine bestimmte Stelle, an der ich das in meinem JavaScript einfügen muss?
Hallo Chris,
Sieht nach einem Tippfehler aus – ich musste den Bindestrich einfügen
input[type="email"].big-dog::-webkit-input-placeholder {color: orange;
}
Auch der Codepen-Link scheint kein funktionierendes Beispiel zu enthalten.
Für Leute, die nach altem IE fragen, müssen Sie ein Skript anstelle dieses CSS verwenden.
Sieht so aus, als ob Desktop Chrome, Desktop Firefox, iOS Safari und IE10+ jetzt einfach
::placeholderunterstützen und keine Präfixe mehr benötigen. :)Bitte sagen Sie mir, wie man die Platzhalterfarbe von ändert
Hallo, das ist sehr hilfreich, aber ich habe immer noch ein Problem damit, dass der Platzhaltertext in Safari „ausgewaschen“ aussieht. Hier ist, was ich habe
#ysw_search_box_id::-moz-placeholder, #ysw_search_box_id:-ms-input-placeholder, #ysw_search_box_id:-moz-placeholder {
color: #191919; opacity: 1; font-weight: bold; font-family: arial; font-size: 14px;
}
Habe ich einfach die falsche Syntax? Entschuldigung, ich bin kein Technikexperte – fange gerade erst an zu lernen!!
Danke!
Wenn die Schriftgröße des Platzhalters von der Schriftgröße der Eingabe abweicht, ist der Platzhalter vertikal falsch ausgerichtet in Chrome (in Firefox funktioniert er gut) -> https://jsfiddle.net/pmyd087f/
Verwenden Sie etwas wie das. Die Eingabe selbst hat eine Schriftgröße von 25px, der Platzhalter auch, aber er wird um 0,6 skaliert und wird 15px groß. Funktioniert in Safari, Chrome und Edge. Warum funktioniert das nicht in Firefox?
&::placeholder {font-size: 25px;
letter-spacing: normal;
transform: scale(0.6);
}
Kann mir jemand sagen, wie man den Platzhalter oben links ausrichtet?
Diese Seite muss aktualisiert werden, da für Edge
::-ms-input-placeholder(mit Doppelpunkt) benötigt wird.Vielen Dank, das ist es, was ich gesucht habe.
So nützlich! Danke!
Danke mein Freund…
Andernfalls hat die Deklaration keine Wirkung. Prüfen Sie dieses Beispiel
Für mich musste ich „input“ vor alle setzen, sonst funktioniert es nicht.
Wie richte ich den Platzhalter in HTML und nicht im Text aus?
Guter Beitrag. Fügen Sie auch Stile für den Microsoft Edge-Browser hinzu.
Schön. Aber ist es in Ordnung, den Elementqualifizierer aus diesen Deklarationen zu entfernen? Wenn nicht, werden sie nur auf input-Tags angewendet und nicht zum Beispiel auf textarea-Tags.
Ich liebe diesen Selektor, er macht meinen Input-Stil cooler.
Wowwwwww danke, das ist genau das, was ich brauchte! Vielen Dank, dass Sie auch den Unterschied zwischen ::placeholder und :placeholder-shown erklärt haben!