Cette page a été traduite à partir de l'anglais par la communauté. Vous pouvez contribuer en rejoignant la communauté francophone sur MDN Web Docs.

View in English Always switch to English

::placeholder

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨janvier 2020⁩.

Le pseudo-élément CSS ::placeholder représente le texte de substitution pour un élément <input> ou <textarea>.

Exemple interactif

input {
  margin-top: 0.5rem;
}

input::placeholder {
  font-weight: bold;
  opacity: 0.5;
  color: red;
}
<label for="phone-number">Votre numéro de téléphone&nbsp;:</label><br />

<input
  id="phone-number"
  type="tel"
  name="phone"
  minlength="10"
  maxlength="10"
  placeholder="Il doit comporter 10 chiffres" />

Seul le sous-ensemble des propriétés CSS qui s'appliquent au pseudo-élément ::first-line peut être utilisé dans une règle utilisant ::placeholder dans son sélecteur.

Note : Par défaut, dans la plupart des navigateurs, le texte de substitution est écrit en gris clair.

Syntaxe

css
::placeholder {
  /* ... */
}

Accessibilité

Contraste

Taux de contraste

Le texte de substitution est généralement affiché dans une couleur plus claire afin d'indiquer qu'il s'agit d'une suggestion quant au type de saisie valide, et non d'une saisie réelle.

Il est important de veiller à ce que le rapport de contraste entre la couleur du texte de substitution et l'arrière-plan du champ de saisie soit suffisamment élevé pour que les personnes malvoyantes puissent le lire, tout en s'assurant qu'il y ait une différence suffisante entre la couleur du texte de substitution et celle du texte saisi afin que les utilisateur·ice·s ne confondent pas le texte de substitution avec les données saisies.

La valeur du contraste est déterminée en comparant la luminosité de la couleur du texte de substitution et celle de l'arrière-plan. Afin de respecter les recommandations d'accessibilité : Web Content Accessibility Guidelines (WCAG) (angl.), un ratio de 4.5:1 est nécessaire pour le contenu textuel normal et un ratio de 3:1 est nécessaire pour les textes plus grands ou en gras. Un texte de grande taille est défini comme étant de 18,66 pixels et en gras ou plus grand, ou de 24 pixels ou plus.

Utilisabilité

Les textes de substitution avec un contraste suffisamment élevé peuvent être pris pour des textes saisis par l'utilisateur·ice. De plus, les textes de substitution disparaissent lorsqu'une personne saisit du contenu dans l'élément <input>. Pour ces deux raisons, les textes de subsitution peuvent gêner la complétion du formulaire, notamment pour les personnes souffrant de troubles cognitifs.

Une autre méthode consiste à fournir cette information en l'incluant à proximité du champ mais en dehors et d'utiliser l'attribut aria-describedby afin de relier l'élément <input> à l'indication associée.

Avec cette méthode, le contenu de l'indication est disponible même si des informations sont saisies dans le champ, et la saisie apparaît sans aucune entrée préexistante lorsque la page est chargée. La plupart des technologies de lecture d'écran utilisent aria-describedby pour lire l'indication après l'annonce du texte de l'étiquette de la saisie, et la personne qui utilise le lecteur d'écran peut la désactiver si elle juge ces informations supplémentaires inutiles.

html
<label for="user-email">Votre adresse mail</label>
<span id="user-email-hint" class="input-hint">Exemple : toto@exemple.fr</span>
<input
  id="user-email"
  aria-describedby="user-email-hint"
  name="email"
  type="email" />

Mode « contraste élevé » de Windows

Le texte de substitution apparaîtra avec le même style que le contenu textuel saisi par l'utilisateur·ice lorsqu'il sera affiché en mode de contraste élevé de Windows (angl.). Il est alors impossible de distinguer un texte saisi d'un texte de substitution.

Libellés

Les textes de substitution ne doivent pas remplacer les éléments <label>. Sans libellé associé grâce à for et à id, les outils d'assistance tels que les lecteurs d'écran ne peuvent pas correctement analyser les éléments <input>.

Exemples

Changer l'apparence du texte de substitution

Cet exemple montre quelques-unes des modifications que vous pouvez apporter aux styles du texte de substitution.

HTML

html
<input placeholder="Écrire ici" />

CSS

css
input::placeholder {
  color: red;
  font-size: 1.2em;
  font-style: italic;
  opacity: 0.5;
}

Résultat

Texte opaque

Certains navigateurs rendent le texte de substitution moins opaque. Si vous souhaitez un texte entièrement opaque, définissez explicitement la valeur de la propriété color. La valeur currentColor peut être utilisée pour avoir la même couleur que l'élément d'entrée correspondant.

HTML

html
<input placeholder="Couleur définie par le navigateur" />
<input placeholder="Même couleur que l'entrée" class="explicit-color" />
<input placeholder="Couleur de texte semi-opaque" class="opacity-change" />

CSS

css
input {
  font-weight: bold;
  color: green;
}

.explicit-color::placeholder {
  /* utiliser la même couleur que l'élément d'entrée pour éviter la couleur par
     défaut définie par le navigateur */
  color: currentColor;
}

.opacity-change::placeholder {
  /* texte moins opaque */
  color: color-mix(in srgb, currentColor 70%, transparent);
}

Résultat

Note : Notez que les navigateurs utilisent différentes couleurs par défaut pour le texte de substitution. Par exemple, Firefox utilise la couleur de l'élément d'entrée avec 54 % d'opacité, et Chrome utilise la couleur darkgray. Si vous souhaitez une couleur de texte de substitution cohérente dans tous les navigateurs, définissez explicitement la color.

Spécifications

Specification
CSS Pseudo-Elements Module Level 4
# placeholder-pseudo

Compatibilité des navigateurs

Voir aussi