Jest to możliwe, z typowymi zastrzeżeniami CSS i możliwością modyfikacji kodu HTML. Jeśli dodasz required
atrybut do elementu, element będzie pasował :invalid
lub w :valid
zależności od tego, czy wartość kontrolki jest pusta, czy nie. Jeśli element nie ma value
atrybutu (lub ma value=""
), wartość kontrolki jest początkowo pusta i staje się niepusty po wprowadzeniu dowolnego znaku (nawet spacji).
Przykład:
<style>
#foo { background: yellow; }
#foo:valid { outline: solid blue 2px; }
#foo:invalid { outline: solid red 2px; }
</style>
<input id=foo required>
Pseudo-klasyfikowane :valid
i :invalid
są zdefiniowane tylko w dokumentach CSS na poziomie Working Draft, ale obsługa jest dość powszechna w przeglądarkach, z wyjątkiem tego, że w IE jest dostarczana z IE 10.
Jeśli chcesz, aby „puste” zawierały wartości zawierające tylko spacje, możesz dodać atrybut pattern=.*\S.*
.
Nie ma (obecnie) selektora CSS do bezpośredniego wykrywania, czy kontrolka wejściowa ma niepustą wartość, więc musimy to zrobić pośrednio, jak opisano powyżej.
Ogólnie rzecz biorąc, selektory CSS odnoszą się do znaczników lub, w niektórych przypadkach, do właściwości elementu ustawionych za pomocą skryptów (JavaScript po stronie klienta), a nie do działań użytkownika. Na przykład :empty
dopasowuje element do pustej treści w znaczniku; input
w tym sensie wszystkie elementy są nieuchronnie puste. Selektor [value=""]
sprawdza, czy element ma value
atrybut w znaczniku i ma pusty ciąg jako wartość. A :checked
i :indeterminate
są podobne rzeczy. Nie ma na nie wpływu faktyczne działanie użytkownika.