Em HTML, os controles (tais como button, input… ) de formulário geralmente possuem o atributo opcional disabled, que quando usado faz com que o usuário fique impossibilitado de usá-los. Isso significa que o usuário não pode alterar campos de entrada desabilitados (disabled) ou usar botões desabilitados.
O atributo disabled se aplica apenas aos elementos dentro do formulário e não ao formulário inteito. Sim, a tag <form> em si não possui um atributo disabled. Por isso, não é possível desabilitar diretamente um formulário HTML inteiro, incluindo todos os seus elementos filhos. Mas temos uma boa alternativa.
The disabled attribute can be used on the following elements:
| Elementos | Attributo |
|---|---|
| <button> | disabled |
| <fieldset> | disabled |
| <input> | disabled |
| <optgroup> | disabled |
| <option> | disabled |
| <select> | disabled |
| <textarea> | disabled |
Solução Alternativa: O Elemento <fieldset>
Felizmente, existe uma solução simples para contornar essa limitação: o uso do elemento <fieldset>. Se esse elemento tiver o atributo disabled, todos os controles de formulário descendentes também serão desabilitados. O elemento <fieldset> é normalmente usado para agrupar vários controles dentro de um formulário, mas é perfeitamente válido utilizá-lo sozinho em um formulário para desabilitar todos os seus elementos. Você pode, opcionalmente, adicionar um elemento <legend> para descrever seu grupo de formulário.
Exemplo de Uso
Aqui está um exemplo de como usar o <fieldset> para desabilitar todos os controles dentro de um formulário:
<form> <fieldset disabled> <!-- seus controles de formulário --> <button>Desabilitado quando o fieldset está desabilitado</button> </fieldset> </form>
Provavelmente, você já tem algum estilo CSS que se aplica aos controles de formulário desabilitados. Esses estilos geralmente também funcionam dentro de um <fieldset> sem a necessidade de ajustes. Apenas certifique-se de usar os seletores corretos, como button:disabled em vez de button[disabled].
Ajustes de Estilo para o <fieldset>
Por padrão, a maioria dos navegadores aplica uma borda e alguns espaçamentos aos elementos <fieldset>. Isso faz sentido quando são usados para agrupar diferentes controles de formulário. No entanto, para este caso de uso, provavelmente não queremos esse estilo padrão. Você pode remover os espaçamentos e a borda com o CSS comum, como padding:0; margin:0; border-width:0.
Uma solução ainda melhor é definir display: contents, o que faz com que o <fieldset>—mas não seus descendentes—seja visualmente removido. Isso resolve os problemas de espaçamento e ajusta corretamente para margens colapsadas.
fieldset { display: contents; }
Essa abordagem garante que seus formulários sejam desabilitados de forma eficaz, mantendo a flexibilidade para personalizar a aparência de acordo com suas necessidades.