Es posible, con las advertencias habituales de CSS y si se puede modificar el código HTML. Si agrega el required
atributo al elemento, el elemento coincidirá :invalid
o :valid
según si el valor del control está vacío o no. Si el elemento no tiene ningún value
atributo (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 :valid
y :invalid
se 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, :empty
coincide con el elemento con contenido vacío en el marcado; Todos los input
elementos están inevitablemente vacíos en este sentido. El selector [value=""]
prueba si el elemento tiene el value
atributo en marcado y tiene la cadena vacía como su valor. Y :checked
ya :indeterminate
son cosas similares. No se ven afectados por la entrada real del usuario.