DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
:invalid ist ein Pseudo-Klassen-Selektor, der das Styling ungültiger Formularelemente ermöglicht. :invalid kann zu jedem Formularelement hinzugefügt werden, wie z. B. form, fieldset oder input, um das Styling basierend auf der Gültigkeit eines Elements oder eines enthaltenen Kindelements zu verbessern.
form:invalid {
outline: 3px dashed red;
}
Syntax
:invalid {
/* ... */
}
Obwohl die Syntax für alle Formularelemente ähnlich ist, unterscheidet sich die Validierung leicht zwischen form, fieldset und input. Diese Unterschiede werden wir in den folgenden Abschnitten untersuchen.
Formulare
form-Elemente ermöglichen bedingtes Styling mit :invalid basierend auf der Gültigkeit von untergeordneten Formularelementen wie fieldset oder input. Wenn ein untergeordnetes Formularelement ungültig ist, wird das form ebenfalls als ungültig betrachtet und das bedingte Styling :invalid angewendet.
form:invalid {
outline: 3px dashed red;
}
Feldsets
Ähnlich wie bei form ermöglicht fieldset bedingtes Styling mit :invalid basierend auf der Gültigkeit von untergeordneten input-Elementen, wie z. B. Radio- oder Checkbox-Inputs.
fiedset:invalid {
outline: 3px dashed red;
}
Inputs
input-Elemente ermöglichen bedingtes Styling mit :invalid, indem sie den value des input validieren.
Die Validierung prüft, ob der Eingabewert mit dem Attribut required erforderlich ist oder ob der Eingabewert mit dem durch das Attribut pattern beschriebenen Muster übereinstimmen muss.
Das Hinzufügen von :invalid zu input wendet dieselben Stile auf alle ungültigen Eingabetypen an. Die Verknüpfung des Inputs mit dem Attributselektor [type] ermöglicht das Styling spezifischer Eingabetypen.
/* All input types */
input:invalid {
outline: 3px dashed red;
}
/* Specific input types */
input[type="text"]:invalid {
outline: 3px dashed red;
}
Verwendung
Barrierefreiheitsüberlegung
Obwohl :invalid ein verbessertes Styling für Formularelemente ermöglicht, reicht dies möglicherweise nicht aus, um die Gültigkeit von Eingaben barrierefrei zu übersetzen.
Zusätzlich zum Styling des Inputs sollten Sie in Erwägung ziehen, Text hinzuzufügen, der die ungültige Validierung für assistive Geräte beschreibt.
Testen auf Gültigkeit
Um das Testen der Validierung eines Inputs zu ermöglichen, muss der Input als Pflichtfeld festgelegt werden, indem das Attribut required auf das Feld angewendet wird.
<input type="text" id="name" name="name" required />
Inputs mit dem Attribut required passen zum Pseudo-Klassen-Selektor :invalid, wenn dem Input kein Wert zugewiesen wurde.
Browser führen zusätzliche Validierungstests für einige Eingabetypen durch. Zum Beispiel erfordern Eingabetypen vom Typ E-Mail im Allgemeinen ein @ im Wert des Inputs, um als gültig zu gelten.
Die Validierung kann durch die Angabe eines Musters, dem der Wert entsprechen muss, um als gültig zu gelten, verbessert werden. Dies kann durch die Einbeziehung des Attributs pattern in einen Input erreicht werden.
Das Attribut pattern muss mit einem Muster versehen werden, typischerweise im Format eines Regulären Ausdrucks, um den bereitgestellten Wert zu testen.
<input type="text" id="zipcode" name="zipcode" pattern="[0-9]{5}" inputmode="numeric" required />
Verkettung von Pseudo-Klassen
Die Pseudo-Klasse :invalid kann mit anderen Pseudo-Klassen-Selektoren wie :focus oder :hover verkettet werden, um das Styling weiter anzupassen.
.input:focus:invalid {
outline: 3px dashed red;
}
Verwendung mit :has()
Da der funktionale Pseudo-Klassen-Selektor :has() in Browsern weit verbreitet ist, kann er in Verbindung mit Gültigkeits-Pseudo-Klassen-Selektoren verwendet werden, um anderen Elementen zu ermöglichen, von bedingtem Styling für Formularelemente zu profitieren.
Um ein Elternelement zu stylen, das einen ungültigen Input enthält
div:has(input:invalid) {
outline: 3px solid red;
}
Spezifikation
:invalid ist in der CSS Selectors Level 4 Spezifikation als „Gültigkeits-Pseudo-Klasse“ definiert, was bedeutet, dass sie zur Gestaltung interaktiver Elemente auf der Grundlage einer Auswertung von Benutzereingaben verwendet wird.
Browser-Unterstützung
Verwandte Artikel
Formularvalidierung Teil 1: Constraint Validation in HTML
Formularvalidierung UX in HTML und CSS
Glücklichere HTML5-Formularvalidierung
Formularvalidierungs-Styling bei Input-Fokus
Zusätzliche Ressourcen
- Mozilla Developer Network – :invalid
- W3C – Selectors Level 4
- HTML-Spezifikation – :invalid
- W3C Farbe: Verwendung, Verständnis von Erfolgskriterium 1.4.1
Das ist in Ordnung.
Beispiele verfestigen
E-Mail: [email protected]
E-Mail (erforderlich): [email protected] > wird gültig _ _ _
Bug in IE10+ bei Verwendung von Pseudo-Elementen
http://codepen.io/diegoleme/pen/cJyjF
Hallo Chris, Sie möchten diesen Inhalt vielleicht aktualisieren, da er eine leichte Ungenauigkeit enthält – unter „Punkte von Interesse“ heißt es, dass wir :invalid mit :before :after verketten können, um etwas Inhalt für Inputs anzuzeigen, aber tatsächlich können wir ::after und ::before nicht für Inputs verwenden (unabhängig von der Verkettung).
input[required]:invalid::after,
input[required]:valid::after {
content: 'keine Chance';
}
Neil
Sie haben Recht, Neil.
Hier ist eine Erklärung, warum es nicht möglich ist: http://stackoverflow.com/questions/2587669/can-i-use-the-after-pseudo-element-on-an-input-field
Ich wollte gerade dasselbe erwähnen: generierter Inhalt kann nicht auf Input-Elementen verwendet werden. Habe 20 Minuten damit verbracht, es basierend auf diesem Artikel zu tun, bevor ich mich erinnerte, warum es nicht funktionierte! :)
dfs
gcfbv
Es sollte beachtet werden, dass [value=”] nur den Anfangszustand des Elements erfasst, was es als Selektor ziemlich nutzlos macht.
Können Sie die Browser-Support-Tabelle aktualisieren?
Laut caniuse.com unterstützen Android und iOS jetzt die Pseudo-Klasse :invalid.
@link http://caniuse.com/#search=%3Ainvalid
IE ordnet
:invalidfälschlicherweise:disabled-Inputs zu.Um dies zu beheben, müssen wir die Selektorspezifität mit der Pseudo-Klasse
:enablederhöhen.Es ist erwähnenswert, dass
:invalidbeim Select-Element in Safari/Mac (zumindest Version 13) nicht funktioniert.Auch für Leute, die dies verwenden, um die Platzhalterfarbe auf Input-Feldern zu imitieren, beachten Sie, dass Firefox Dev Edition auf Mac Farben für beide unterschiedlich rendert. Ich weiß nicht warum. Gleiche Hex-Farbe, aber anders gerendert.
Abgesehen vom Teil über die Verkettung von :after mit :invalid, sehr gut, aber es wäre auch sehr hilfreich, darüber zu sprechen, wie die :invalid-Pseudo-Klasse eines (Input-)Elements gesetzt oder gelöscht werden kann (:valid gesetzt) oder zumindest einen Link dazu bereitzustellen.
Vielen Dank