170 votes

Correspondance d'une boîte de saisie vide en utilisant CSS

Comment appliquer un style à une zone de saisie vide? Si l'utilisateur tape quelque chose dans le champ de saisie, le style ne devrait plus être appliqué. Est-ce possible en CSS? J'ai essayé ceci:

input[value=""]

256voto

amanuo Points 69

Dans les navigateurs modernes, vous pouvez utiliser :placeholder-shown pour cibler l'entrée vide (à ne pas confondre avec ::placeholder).

input:placeholder-shown {
    border: 1px solid red; /* Bordure rouge uniquement si l'entrée est vide */
}

En HTML, vous devez définir l'attribut placeholder. Le navigateur Chrome nécessite au moins un caractère d'espace en tant que valeur.

171voto

lukmdo Points 3511

Si seul le champ est obligatoire , vous pouvez utiliser input:valide

#foo-thing:valide + .msg { visibility: visible!important; }      

 Yay not empty

Voir en direct sur jsFiddle

Ou négatif en utilisant #foo-thing:invalide (crédit à @SamGoody)

15 votes

..ou négativement en utilisant : invalid {} developer.mozilla.org/fr/docs/Web/CSS/…

7 votes

Je veux la même chose, mais mon champ n'est pas obligatoire. Est-il possible de le faire quand même ?

1 votes

C'est brillant :)

45voto

Quentin Points 325526

Il n'y a pas de sélecteur en CSS qui le fait. Les sélecteurs d'attributs correspondent aux valeurs des attributs, pas aux valeurs calculées.

Vous devriez utiliser JavaScript.

3 votes

Pour toute personne trouvant cette réponse plus tard: Quentin a raison concernant les valeurs calculées, cependant il existe le sélecteur :empty qui pourrait être utilisé ici et qui bénéficie d'un support raisonnable (tous les navigateurs sauf IE8 et les versions antérieures selon: w3schools.com/cssref/sel_empty.asp

37 votes

:empty le sélecteur fonctionne uniquement sur les éléments vides, c'est-à-dire uniquement sur les éléments qui ont une balise d'ouverture et de fermeture qui est vide entre elles, et les éléments à balise unique qui sont toujours considérés comme vides, exemple, donc il ne peut pas être utilisé sur les éléments input à l'exception de textarea

7 votes

Pas vrai. Voir la réponse de lukmo ci-dessous. Combiner l'attribut requis et les sélecteurs pseudo :valid ou :invalid permet d'obtenir exactement cela.

23voto

Shaggy Points 5578

La mise à jour de la valeur d'un champ ne met pas à jour son attribut de valeur dans le DOM, c'est pourquoi votre sélecteur correspond toujours à un champ, même lorsqu'il n'est pas réellement vide.

Utilisez plutôt la pseudo-classe :invalid pour obtenir ce que vous voulez, comme ceci :

input:required {
  border: 1px solid green;
}
input:required:invalid {
  border: 1px solid red;
}

18voto

Draco Ater Points 8468

input[value=""], input:not([value])

fonctionne avec:

Mais le style ne changera pas dès que quelqu'un commencera à taper (vous aurez besoin de JS pour cela).

1 votes

Pas fiable car la valeur de l'attribut n'est pas modifiée dans le DOM après une modification de champ. Cependant, une astuce intéressante si cela ne vous dérange pas - et fonctionne dans les dernières versions de Safari, Chrome, FF et IE...

9 votes

Pour correspondre à ce qui précède, vous pouvez utiliser input[value=""], input:not([value]).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X