Ich habe eine verdammt gute Zeit mit diesem speziellen CSS-Selektor, der nicht funktionieren möchte, wenn ich ihn hinzufüge :not(:empty)
. Es scheint gut mit jeder Kombination der anderen Selektoren zu funktionieren:
input:not(:empty):not(:focus):invalid { border-color: #A22; box-shadow: none }
Wenn ich das :not(:empty)
Teil entferne , funktioniert es einwandfrei. Selbst wenn ich den Selektor auf input:not(:empty)
ihn ändere, werden keine Eingabefelder ausgewählt, in die Text eingegeben wurde. Ist das kaputt oder darf ich es einfach nicht :empty
in einem :not()
Selektor verwenden?
Das einzige andere, woran ich denken kann, ist, dass Browser immer noch sagen, dass das Element leer ist, weil es keine untergeordneten Elemente hat, sondern nur einen "Wert" pro Wort. Verfügt der :empty
Selektor nicht über eine separate Funktionalität für ein Eingabeelement im Vergleich zu einem regulären Element? Dies scheint jedoch nicht wahrscheinlich zu sein, da bei Verwendung :empty
eines Felds und Eingabe etwas dazu führen, dass die alternativen Effekte verschwinden (weil es nicht mehr leer ist).
Getestet in Firefox 8 und Chrome.
quelle
:empty
Wähler „Einige andere Elemente, auf der anderen Seite, sind leer (dh sie haben keine Kinder) definitionsgemäß :<input>
,<img>
,<br>
, und<hr>
, zum Beispiel.“:not(:empty)
, funktioniert der rote Rand wie erwartet für eine Eingabe, die nicht scharfgestellt, aber ungültig ist.Antworten:
Als nichtiges Element wird ein
<input>
Element von der HTML-Definition von "leer" als leer betrachtet , da das Inhaltsmodell aller leeren Elemente immer leer ist . Sie stimmen also immer mit der:empty
Pseudoklasse überein , unabhängig davon, ob sie einen Wert haben oder nicht. Aus diesem Grund wird ihr Wert auch durch ein Attribut im Start-Tag und nicht durch Textinhalt in Start- und End-Tags dargestellt.Auch aus der Selectors-Spezifikation :
Folglich
input:not(:empty)
wird niemals etwas in einem richtigen HTML-Dokument übereinstimmen. (Es würde immer noch in einem hypothetischen XML-Dokument funktionieren, das ein<input>
Element definiert , das Text oder untergeordnete Elemente akzeptieren kann.)Ich glaube nicht, dass Sie leere
<input>
Felder dynamisch mit nur CSS formatieren können (dh Regeln, die gelten, wenn ein Feld leer ist und nicht, wenn Text eingegeben wird). Sie können anfänglich leere Felder auswählen, wenn sie ein leeresvalue
Attribut haben (input[value=""]
) oder das Attribut insgesamt fehlt (input:not([value])
), aber das war es auch schon.quelle
input:empty
. Vielleicht habe ich etwas falsch geschrieben, wer weiß.input
Elemente dynamisch gestaltet werden (in ausreichend modernen Browsern), wenn Sie dasrequired
Attribut im HTML-Markup verwenden können. Anschließend können Sie mit:valid
und:invalid
in CSS testen, ob der Wert des Steuerelements nicht leer oder leer ist. Siehe stackoverflow.com/questions/16952526/…Es ist mit Inline-Javascript
onkeyup="this.setAttribute('value', this.value);"
& möglichinput:not([value=""]):not(:focus):invalid
Demo: http://jsfiddle.net/mhsyfvv9/
quelle
onchange
Veranstaltung in diesem Fall nicht besser? Da können Sie auch Eingabewerte mit bearbeitenRight click > Cut
(zum Beispiel). Getestet: funktioniert gut.Sie könnten versuchen, Folgendes zu verwenden: Platzhalter angezeigt ...
Keine große Unterstützung ... caniuse
quelle
quelle
Sie können dies anders angehen; Lassen Sie die Verwendung der
:empty
Pseudoklasse aus und verwenden Sieinput
Ereignisse, um einen signifikanten Wert im<input>
Feld zu erkennen und entsprechend zu formatieren :verbunden
input
Ereignissen vorschlägt (DOM-Mutationsereignisse sind jetzt in DOM-Stufe 4 veraltet und wurden durch DOM-Mutationsbeobachter ersetzt).Haftungsausschluss: Beachten Sie, dass
input
Ereignisse derzeit experimentell sind und wahrscheinlich nicht allgemein unterstützt werden.quelle
Da Platzhalter bei der Eingabe verschwinden, können Sie Folgendes verwenden:
quelle
reine CSS-Lösung
quelle
Eine weitere reine CSS-Lösung
quelle
Dies sollte in modernen Browsern funktionieren:
Es wählt alle Eingaben mit dem Wertattribut aus und wählt dann Eingaben mit nicht leerem Wert aus.
quelle
value=""
. Das Eingeben / Entfernen von etwas in das Feld würde keine Änderungen verursachen.Dies funktioniert, weil wir die Eingabe nur auswählen, wenn keine leere Zeichenfolge vorhanden ist.
quelle
quelle