Wie wende ich einen Stil auf ein leeres Eingabefeld an? Wenn der Benutzer etwas in das Eingabefeld eingibt, sollte der Stil nicht mehr angewendet werden. Ist das in CSS möglich? Ich habe es versucht:
input[value=""]
css
input
css-selectors
Sjoerd
quelle
quelle
In modernen Browsern können Sie
:placeholder-shown
die leere Eingabe als Ziel festlegen (nicht zu verwechseln::placeholder
).Weitere Informationen und Browserunterstützung: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
quelle
In CSS gibt es keinen Selektor, der dies tut. Attributselektoren stimmen mit Attributwerten überein, nicht mit berechneten Werten.
Sie müssten JavaScript verwenden.
quelle
:empty
Selektor nur Arbeit zu leeren Elementen, dh nur auf Elemente , die das Öffnen und Schließen - Tag haben , die zwischendurch , und einzelnen Tag Elemente leer ist , die immer als leer, beispielsweise , so dass es nicht auf Eingabeelemente außer verwendet werden kanntextarea
Durch das Aktualisieren des Werts eines Felds wird das Wertattribut im DOM nicht aktualisiert. Daher stimmt Ihr Selektor immer mit einem Feld überein, auch wenn es nicht wirklich leer ist.
Verwenden Sie stattdessen die
invalid
Pseudoklasse , um das zu erreichen, was Sie wollen:quelle
input[value=""], input:not([value])
arbeitet mit:
Der Stil ändert sich jedoch nicht, sobald jemand mit der Eingabe beginnt (dafür benötigen Sie JS).
quelle
input[value=""], input:not([value])
.Wenn unterstützt ältere Browser nicht benötigt wird, können Sie eine Kombination aus verwenden
required
,valid
undinvalid
.Die gute Sache über diese Verwendung ist
valid
undinvalid
Pseudoelemente arbeiten gut mit den Typeigenschaften Eingabefelder ein . Beispielsweise:Als Referenz JSFiddle hier: http://jsfiddle.net/0sf6m46j/
quelle
in jQuery. Ich habe eine Klasse hinzugefügt und mit CSS gestylt.
quelle
Das hat bei mir funktioniert:
Fügen Sie für den HTML-Code das
required
Attribut zum Eingabeelement hinzuVerwenden Sie für das CSS den
:invalid
Selektor, um auf die leere Eingabe zu zielenAnmerkungen:
required
von w3Schools.com : "Wenn vorhanden, wird angegeben, dass vor dem Absenden des Formulars ein Eingabefeld ausgefüllt werden muss."quelle
Diese Frage wurde vielleicht vor einiger Zeit gestellt, aber als ich kürzlich auf der Suche nach einer clientseitigen Formularvalidierung auf dieses Thema gestoßen bin und der
:placeholder-shown
Support immer besser wird, dachte ich, dass das Folgende anderen helfen könnte.Mit der Idee von Berend , diese CSS4-Pseudoklasse zu verwenden, konnte ich eine Formularvalidierung erstellen, die erst ausgelöst wurde, nachdem der Benutzer das Ausfüllen abgeschlossen hatte.
Hier finden Sie Ademo und Erklärungen zu CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
quelle
Wenn Sie glücklich sind, IE oder Pre-Chromium Edge nicht zu unterstützen (was in Ordnung sein kann, wenn Sie dies für die progressive Verbesserung verwenden), können Sie es verwenden,
:placeholder-shown
wie Berend gesagt hat. Beachten Sie, dass Sie für Chrome und Safari tatsächlich einen nicht leeren Platzhalter benötigen, damit dies funktioniert, obwohl ein Leerzeichen funktioniert.quelle
Es hat bei mir funktioniert, der Eingabe einen Klassennamen hinzuzufügen und dann CSS-Regeln darauf anzuwenden:
quelle
Ich frage mich, welche Antworten wir haben, um leere Eingabefelder zu erhalten. Schauen Sie sich diesen Code an
AKTUALISIEREN
Mehr dazu für einen guten Blick in die Validierung
quelle
:empty
gilt nur für Elemente, die keine Kinder haben. Eingaben können überhaupt keine untergeordneten Knoten haben, daher wird Ihre Eingabe immer mit einem roten Rand versehen. Siehe auch diesen Kommentarvalue
wird die Anzahl der untergeordneten Knoten nicht geändert.<parent><child></child></parent>
). Sie haben gerade<input></input>
und wie Sie schreiben , was zu ändern ist kein<value>
Knoten innerhalb ,<input>
sondern ein Wert Attribut :<input value='stuff you type'></input>
Mir ist klar, dass dies ein sehr alter Thread ist, aber die Dinge haben sich seitdem ein wenig geändert und es hat mir geholfen, die richtige Kombination von Dingen zu finden, die ich brauchte, um mein Problem zu beheben. Also dachte ich, ich würde teilen, was ich getan habe.
Das Problem war, dass ich für eine optionale Eingabe das gleiche CSS anwenden musste, wenn es gefüllt war, wie für eine gefüllte Eingabe. Das CSS verwendete die Pseudo-Klasse: valid, die das CSS auch dann auf die optionale Eingabe anwendete, wenn es nicht gefüllt war.
So habe ich es behoben;
HTML
CSS
quelle