Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Stylisation des Formulaires et des Champs de Saisie | Section
Stylisation des Applications React avec Tailwind CSS

bookStylisation des Formulaires et des Champs de Saisie

Glissez pour afficher le menu

Lors de la création d'interfaces utilisateur avec React, les formulaires et les éléments de saisie sont essentiels pour la collecte des données utilisateur. Tailwind CSS propose un ensemble puissant d'utilitaires permettant de styliser les champs de saisie, les étiquettes et les états de validation pour une expérience soignée et accessible. Il est possible d'utiliser des utilitaires de base comme border, rounded, px et py pour définir la forme et l'espacement des champs. Pour la couleur et le contraste, des utilitaires tels que bg-white, text-gray-700, border-gray-300 et placeholder-gray-400 assurent clarté et lisibilité.

Pour améliorer l'expérience utilisateur, Tailwind fournit des utilitaires basés sur l'état pour les états de focus, d'erreur et de désactivation. Par exemple, focus:outline-none et focus:ring-2 focus:ring-blue-500 mettent en évidence un champ lorsqu'il reçoit le focus, indiquant clairement à l'utilisateur où il saisit du texte. Pour les états d'erreur, border-red-500 et text-red-600 signalent visuellement les problèmes, tandis que disabled:bg-gray-100 et disabled:cursor-not-allowed indiquent clairement lorsqu'un champ n'est pas interactif. Les étiquettes peuvent être stylisées avec block, mb-1 et font-medium pour un espacement et une mise en valeur appropriés, garantissant des formulaires à la fois attrayants et accessibles.

Considérez cet exemple d'un composant de formulaire React stylisé avec Tailwind. Il inclut un champ de texte avec une étiquette et affiche différents styles pour les états normal, focus, erreur et désactivé. Vous pouvez observer comment chaque état est géré à l'aide des classes Tailwind.

import React, { useState } from "react";

function ExampleForm() {
  const [value, setValue] = useState("");
  const [touched, setTouched] = useState(false);
  const [disabled, setDisabled] = useState(false);
  const hasError = touched && value.trim() === "";

  return (
    <form className='max-w-sm mx-auto mt-8'>
      <label
        htmlFor='username'
        className='block mb-1 font-medium text-gray-700'
      >
        Username
      </label>
      <input
        id='username'
        type='text'
        value={value}
        onChange={(e) => setValue(e.target.value)}
        onBlur={() => setTouched(true)}
        disabled={disabled}
        className={`w-full px-3 py-2 border rounded-md shadow-sm placeholder-gray-400
          focus:outline-none focus:ring-2 focus:ring-blue-500
          ${
            hasError
              ? "border-red-500 text-red-600"
              : "border-gray-300 text-gray-700"
          }
          ${disabled ? "bg-gray-100 cursor-not-allowed" : "bg-white"}
        `}
        placeholder='Enter your username'
      />
      {hasError && (
        <p className='mt-1 text-sm text-red-600'>Username is required.</p>
      )}
      <button
        type='button'
        className='mt-4 px-4 py-2 bg-blue-600 text-white rounded hover:bg-blue-700'
        onClick={() => setDisabled(!disabled)}
      >
        {disabled ? "Enable Input" : "Disable Input"}
      </button>
    </form>
  );
}

Ce formulaire utilise les utilitaires Tailwind pour gérer les éléments suivants :

  • État normal : border-gray-300, text-gray-700, bg-white ;
  • État focus : focus:ring-2, focus:ring-blue-500, focus:outline-none ;
  • État d'erreur : border-red-500, text-red-600, et un message d'erreur en text-red-600 ;
  • État désactivé : bg-gray-100, cursor-not-allowed.

En combinant ces utilitaires, il est possible de créer des formulaires visuellement clairs, accessibles et réactifs aux interactions utilisateur.

question mark

Quelle combinaison de classes Tailwind appliquer à un élément input pour indiquer visuellement un état d'erreur après validation ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 1. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Section 1. Chapitre 6
some-alt