Es posible, con las advertencias habituales de CSS y si se puede modificar el código HTML. Si agrega el requiredatributo al elemento, el elemento coincidirá :invalido :validsegún si el valor del control está vacío o no. Si el elemento no tiene ningún valueatributo (o lo tiene value=""), el valor del control está inicialmente vacío y deja de estar vacío cuando se ingresa cualquier carácter (incluso un espacio).
Ejemplo:
<style>
#foo { background: yellow; }
#foo:valid { outline: solid blue 2px; }
#foo:invalid { outline: solid red 2px; }
</style>
<input id=foo required>
Los pseudo-clasificados :validy :invalidse definen solo en documentos CSS de nivel Working Draft, pero el soporte está bastante extendido en los navegadores, excepto que en IE, vino con IE 10.
Si desea que los valores de inclusión "vacíos" incluyan solo espacios, puede agregar el atributo pattern=.*\S.*.
No existe (actualmente) un selector CSS para detectar directamente si un control de entrada tiene un valor no vacío, por lo que debemos hacerlo indirectamente, como se describió anteriormente.
En general, los selectores CSS se refieren al marcado o, en algunos casos, a las propiedades de los elementos configurados con secuencias de comandos (JavaScript del lado del cliente), en lugar de las acciones del usuario. Por ejemplo, :emptycoincide con el elemento con contenido vacío en el marcado; Todos los inputelementos están inevitablemente vacíos en este sentido. El selector [value=""]prueba si el elemento tiene el valueatributo en marcado y tiene la cadena vacía como su valor. Y :checkedya :indeterminateson cosas similares. No se ven afectados por la entrada real del usuario.