É possível, com as ressalvas usuais de CSS e se o código HTML pode ser modificado. Se você adicionar o required
atributo ao elemento, o elemento corresponderá :invalid
ou :valid
se o valor do controle está vazio ou não. Se o elemento não tivervalue
atributo (ou tem value=""
), o valor do controle está inicialmente vazio e fica vazio quando qualquer caractere (mesmo um espaço) é inserido.
Exemplo:
<style>
#foo { background: yellow; }
#foo:valid { outline: solid blue 2px; }
#foo:invalid { outline: solid red 2px; }
</style>
<input id=foo required>
As pseudo-classificadas :valid
e:invalid
são definidas apenas nos documentos CSS do nível Working Draft, mas o suporte é bastante difundido nos navegadores, exceto que no IE, ele veio com o IE 10.
Se você deseja tornar “vazio” incluir valores que consistem apenas em espaços, é possível adicionar o atributo pattern=.*\S.*
.
Atualmente, não existe um seletor de CSS para detectar diretamente se um controle de entrada tem um valor não vazio; portanto, precisamos fazê-lo indiretamente, conforme descrito acima.
Geralmente, os seletores de CSS se referem à marcação ou, em alguns casos, às propriedades do elemento definidas com scripts (JavaScript do lado do cliente), em vez de ações do usuário. Por exemplo, :empty
combina elemento com conteúdo vazio na marcação; todos os input
elementos são inevitavelmente vazios nesse sentido. O seletor [value=""]
testa se o elemento tem o value
atributo na marcação e tem a cadeia vazia como seu valor. E :checked
e :indeterminate
são coisas semelhantes. Eles não são afetados pela entrada real do usuário.