È possibile, con i soliti avvertimenti CSS e se il codice HTML può essere modificato. Se aggiungi l' requiredattributo all'elemento, l'elemento corrisponderà :invalido in :validbase al fatto che il valore del controllo sia vuoto o meno. Se l'elemento non ha alcun valueattributo (o ha value=""), il valore del controllo è inizialmente vuoto e diventa non vuoto quando viene inserito un carattere (anche uno spazio).
Esempio:
<style>
#foo { background: yellow; }
#foo:valid { outline: solid blue 2px; }
#foo:invalid { outline: solid red 2px; }
</style>
<input id=foo required>
Gli pseudo-classificati :valide :invalidsono definiti solo nei documenti CSS a livello di Working Draft, ma il supporto è piuttosto diffuso nei browser, tranne che in IE, è arrivato con IE 10.
Se si desidera rendere "vuoti" includere valori costituiti solo da spazi, è possibile aggiungere l'attributo pattern=.*\S.*.
Non esiste (attualmente) alcun selettore CSS per rilevare direttamente se un controllo di input ha un valore non vuoto, quindi è necessario farlo indirettamente, come descritto sopra.
In genere, i selettori CSS fanno riferimento al markup o, in alcuni casi, alle proprietà degli elementi impostate con lo scripting (JavaScript lato client), piuttosto che con le azioni dell'utente. Ad esempio, :emptyabbina l'elemento con contenuto vuoto nel markup; tutti gli inputelementi sono inevitabilmente vuoti in questo senso. Il selettore [value=""]verifica se l'elemento ha l' valueattributo nel markup e ha la stringa vuota come valore. E :checkede :indeterminatesono cose simili. Non sono interessati dall'effettivo input dell'utente.