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=""]

5voto

Johan M. Points 31

Cette question a peut-être été posée il y a quelque temps, mais comme je suis récemment tombé sur ce sujet en cherchant une validation de formulaire côté client, et comme le support de :placeholder-shown s'améliore, j'ai pensé que ce qui suit pourrait aider d'autres personnes.

En utilisant l'idée de Berend d'utiliser cette pseudo-classe CSS4, j'ai pu créer une validation de formulaire déclenchée uniquement après que l'utilisateur ait fini de le remplir.

Voici une démo et explication sur CodePen : https://codepen.io/johanmouchet/pen/PKNxKQ

4voto

Sora2455 Points 107

Si vous êtes satisfait de ne pas soutenir IE ou pre-Chromium Edge (ce qui peut être acceptable si vous utilisez ceci pour l'amélioration progressive), vous pouvez utiliser :placeholder-shown comme l'a dit Berend. Notez que pour Chrome et Safari, vous avez en réalité besoin d'un espace réservé non vide pour que cela fonctionne, bien qu'un espace fonctionne.

*,
 ::after,
 ::before {
  box-sizing: border-box;
}

label.floating-label {
  display: block;
  position: relative;
  height: 2.2em;
  margin-bottom: 1em;
}

label.floating-label input {
  font-size: 1em;
  height: 2.2em;
  padding-top: 0.7em;
  line-height: 1.5;
  color: #495057;
  background-color: #fff;
  background-clip: padding-box;
  border: 1px solid #ced4da;
  border-radius: 0.25rem;
  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;
}

label.floating-label input:focus {
  color: #495057;
  background-color: #fff;
  border-color: #80bdff;
  outline: 0;
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}

label.floating-label input+span {
  position: absolute;
  top: 0em;
  left: 0;
  display: block;
  width: 100%;
  font-size: 0.66em;
  line-height: 1.5;
  color: #495057;
  border: 1px solid transparent;
  border-radius: 0.25rem;
  transition: font-size 0.1s ease-in-out, top 0.1s ease-in-out;
}

label.floating-label input:placeholder-shown {
  padding-top: 0;
  font-size: 1em;
}

label.floating-label input:placeholder-shown+span {
  top: 0.3em;
  font-size: 1em;
}

    Exemple d'étiquettes flottantes (sans JS)

    Nom d'utilisateur

    Mot de passe

  Inspiré par les étiquettes flottantes de Bootstrap.

2voto

WebDragon Points 186

Alors j'ai joué plus tôt avec les nouvelles clauses :where et :is et imaginé ce petit truc amusant, et après avoir trouvé ce post avec les bouts :invalid et :placeholder-shown, j'ai pensé que je pourrais partager cette possibilité pour référence future

:required:where( input, textarea ):where( :placeholder-shown, :invalid ) {
    border-color: var(--warning);
}

qui applique la couleur :root { --warning: orange; } à tout input ou textarea requis, qui est soit vide soit invalide. Et c'est tout simplement sexy

1voto

Samarth Ramesh Points 123

Alors qu'aucun navigateur ne prend actuellement en charge cela (2021-10-01), il existe une proposition pour une pseudo-classe :blank.

réf: https://developer.mozilla.org/en-US/docs/Web/CSS/:blank. Notez que ceci est expérimental et qu'aucun navigateur ne le prend en charge actuellement.

1voto

Sam Points 25

Voici comment vous pouvez le rendre possible. N'oubliez pas de définir placeholder=" " et required comme attributs de vos inputs. Vous pouvez modifier les props comme vous le souhaitez.

body{
    display: flex;
    justify-content: center;
    align-items: center;
}
.input-gp {
    margin-top: 150px;
    position: relative;

}
.input-gp input {
    position: relative;

}
.input-gp label{
    position: absolute;
    left: 5px;
    bottom: 5px;
    transition: all .4s ease;
}
.input-gp input:placeholder-shown + label{
    left: 10px;
    bottom: 5px;
}
.input-gp input:focus + label,
.input-gp input + label{
    bottom: 30px;
    left: 10px;
}

    Email

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