É possível, com as ressalvas usuais de CSS e se o código HTML pode ser modificado. Se você adicionar o requiredatributo ao elemento, o elemento corresponderá :invalidou :validse 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 :valide: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, :emptycombina elemento com conteúdo vazio na marcação; todos os inputelementos são inevitavelmente vazios nesse sentido. O seletor [value=""]testa se o elemento tem o valueatributo na marcação e tem a cadeia vazia como seu valor. E :checkede :indeterminatesão coisas semelhantes. Eles não são afetados pela entrada real do usuário.