Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Estilizando Formulários e Campos de Entrada | Seção
Estilizando Aplicações React com Tailwind CSS

bookEstilizando Formulários e Campos de Entrada

Deslize para mostrar o menu

Ao desenvolver interfaces de usuário em React, formulários e elementos de entrada são essenciais para capturar dados dos usuários. O Tailwind CSS oferece um conjunto poderoso de utilitários que permitem estilizar campos de entrada, rótulos e estados de validação para uma experiência refinada e acessível. É possível utilizar utilitários básicos como border, rounded, px e py para definir o formato e o espaçamento dos campos. Para cor e contraste, utilitários como bg-white, text-gray-700, border-gray-300 e placeholder-gray-400 ajudam a manter a clareza e a legibilidade.

Para aprimorar a experiência do usuário, o Tailwind fornece utilitários baseados em estado para foco, erro e desabilitado. Por exemplo, focus:outline-none e focus:ring-2 focus:ring-blue-500 destacam um campo quando recebe foco, deixando claro para o usuário onde está digitando. Para estados de erro, border-red-500 e text-red-600 indicam visualmente problemas, enquanto disabled:bg-gray-100 e disabled:cursor-not-allowed deixam evidente quando um campo não pode ser interagido. Os rótulos podem ser estilizados com block, mb-1 e font-medium para garantir espaçamento e ênfase adequados, tornando os formulários atraentes e acessíveis.

Considere este exemplo de um componente de formulário React estilizado com Tailwind. Ele inclui um campo de texto com rótulo e exibe estilos diferentes para os estados normal, foco, erro e desabilitado. É possível observar como cada estado é tratado utilizando classes do 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>
  );
}

Este formulário utiliza utilitários do Tailwind para lidar com os seguintes estados:

  • Estado normal: border-gray-300, text-gray-700, bg-white;
  • Estado de foco: focus:ring-2, focus:ring-blue-500, focus:outline-none;
  • Estado de erro: border-red-500, text-red-600 e uma mensagem de erro em text-red-600;
  • Estado desabilitado: bg-gray-100, cursor-not-allowed.

Combinando esses utilitários, é possível criar formulários visualmente claros, acessíveis e responsivos à interação do usuário.

question mark

Qual combinação de classes do Tailwind você aplicaria a um elemento de entrada para indicar visualmente um estado de erro após a validação?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 1. Capítulo 6

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 1. Capítulo 6
some-alt