Comment appliquer un style à une zone de saisie vide? Si l'utilisateur tape quelque chose dans le champ de saisie, le style ne doit plus être appliqué. Est-ce possible en CSS? J'ai essayé ceci:
input[value=""]
Si seul le champ est required
, vous pouvez utiliser input:valid
#foo-thing:valid + .msg { visibility: visible!important; }
<input type="text" id="foo-thing" required="required">
<span class="msg" style="visibility: hidden;">Yay not empty</span>
OU nie en utilisant #foo-thing:invalid
(crédit de @SamGoody)
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; /* Red border only if the input is empty */
}
Plus d'informations et support du navigateur: https://css-tricks.com/almanac/selectors/p/placeholder-shown/
Il n'y a pas de sélecteur dans CSS qui le fasse. Les sélecteurs d'attributs correspondent aux valeurs d'attribut, pas aux valeurs calculées.
Vous devrez utiliser JavaScript.
La mise à jour de la valeur d'un champ ne met pas à jour son attribut value dans le DOM. C'est pourquoi votre sélecteur correspond toujours à un champ, même s'il n'est pas vide.
Utilisez plutôt la invalid
pseudo-class pour obtenir ce que vous voulez, comme ceci:
input:required {
border: 1px solid green;
}
input:required:invalid {
border: 1px solid red;
}
<input required type="text" value="">
<input required type="text" value="Value">
input[value=""], input:not([value])
marche avec:
<input type="text" />
<input type="text" value="" />
Mais le style ne changera pas dès que quelqu'un commencera à taper (vous avez besoin de JS pour cela).
Si la prise en charge des anciens navigateurs n'est pas nécessaire, vous pouvez utiliser une combinaison de required
, valid
et invalid
.
L'avantage à utiliser ceci est que les pseudo-éléments valid
et invalid
fonctionnent bien avec les attributs de type des champs d'entrée. Par exemple:
input:invalid, textarea:invalid {
box-shadow: 0 0 5px #d45252;
border-color: #b03535
}
input:valid, textarea:valid {
box-shadow: 0 0 5px #5cd053;
border-color: #28921f;
}
<input type="email" name="email" placeholder="[email protected]" required />
<input type="url" name="website" placeholder="http://johndoe.com"/>
<input type="text" name="name" placeholder="John Doe" required/>
Pour référence, JSFiddle ici: http://jsfiddle.net/0sf6m46j/
$('input#edit-keys-1').blur(function(){
tmpval = $(this).val();
if(tmpval == '') {
$(this).addClass('empty');
$(this).removeClass('not-empty');
} else {
$(this).addClass('not-empty');
$(this).removeClass('empty');
}
});
dans jQuery. J'ai ajouté une classe et stylé avec css.
.empty { background:none; }
Cela a fonctionné pour moi:
html: - ajoute l'attribut requis à l'élément d'entrée
<input class="my-input-element" type="text" placeholder="" required />
css: - utilisation: sélecteur non valide
input.my-input-element:invalid {
}
Notes:
Cette question a peut-être été posée il y a un certain temps, mais comme je venais d'atterrir sur ce sujet, je cherchais une validation de formulaire côté client et le :placeholder-shown
support va mieux, j'ai pensé que ce qui suit pourrait aider les autres.
En utilisant Berend l'idée d'utiliser cette pseudo-classe CSS4, j'ai été en mesure de créer une validation de formulaire déclenchée uniquement une fois que l'utilisateur a fini de le remplir.
Voici ademo et explication sur CodePen: https://codepen.io/johanmouchet/pen/PKNxKQ
Je me suis demandé par réponses nous avons l'attribut clair pour obtenir des zones de saisie vides, jetez un oeil à ce code
/*empty input*/
input:empty{
border-color: red;
}
/*input with value*/
input:not(:empty){
border-color: black;
}
MISE À JOUR
input, select, textarea {
border-color: @green;
&:empty {
border-color: @red;
}
}
More over pour avoir un super look dans la validation
input, select, textarea {
&[aria-invalid="true"] {
border-color: amber !important;
}
&[aria-invalid="false"], &.valid {
border-color: green !important;
}
}