W3docs

Tag HTML <form>

A tag <form> cria um formulário web. Agrupa campos e controles e os envia via os atributos action e method.

A tag <form> é usada para adicionar formulários HTML à página web para entrada de dados do utilizador. Os formulários são usados para enviar ao servidor os dados submetidos pelo utilizador. Os dados são enviados ao pressionar o botão "Submit". Se não houver esse botão, as informações são enviadas quando a tecla "Enter" é pressionada.

Dica

Se os elementos individuais dentro da tag <form> forem válidos, pode usar a pseudo-classe CSS :valid para estilizar a tag, e a pseudo-classe :invalid para os casos em que não são válidos.

Sintaxe

A tag <form> vem em pares. O conteúdo é escrito entre as tags de abertura (<form>) e de fechamento (</form>).

O elemento <form> contém outras tags HTML que definem o método de entrada de dados:

  • A tag <input> define um campo de entrada do utilizador.
  • A tag <textarea> define um campo de formulário para criar uma área de entrada de múltiplas linhas.
  • A tag <button> é usada para colocar um botão dentro de um formulário.
  • A tag <select> configura um controle para criar uma caixa de lista suspensa.
  • A tag <option> define os itens na lista suspensa definida pela tag <select>.
  • A tag <optgroup> agrupa dados relacionados na lista suspensa definida pela tag <select>.
  • A tag <fieldset> agrupa visualmente os elementos dentro do formulário definido pela tag <form>.
  • A tag <label> define o rótulo de texto para o elemento <input>.
  • A tag <legend> define o cabeçalho para o elemento <fieldset>.

Exemplo da tag HTML <form>:

Exemplo da tag HTML <form>

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/form/submit" method="POST" >
      <label for="fname">Name</label>
      <input type="text" name="FirstName" id="fname" value="Mary"/><br /><br />
      <label for="lname">Surname</label>
      <input type="text" name="LastName" id="lname" value="Thomson"/><br /><br />
      <input type="submit" value="Submit"/>
    </form>
  </body>
</html>

Resultado

Form example

Exemplo da tag HTML <form> com as tags <input> e <label>:

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/form/submit" method="POST" >
      <label for="fname">Name</label>
      <input type="text" name="Name" id="fname" value="Mary"/><br /><br />
      <label for="number">Phone</label>
      <input type="number" name="Phone" id="number"/><br /><br />
      <label for="email">Email</label>
      <input type="email" placeholder="Enter Email" name="email" required /> <br /><br />
      <input type="submit" value="Submit"/>
    </form>
  </body>
</html>

Exemplo da tag HTML <form> com a tag <textarea>:

O atributo for da tag <label> está vinculado ao id do <textarea>, de modo que clicar no rótulo foca o campo e os leitores de ecrã o anunciam corretamente.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <h1>Form example</h1>
    <form action="/form/submit" method="POST" >
      <label for="message">Message</label><br />
      <textarea id="message" name="message" rows="3" cols="30" placeholder="Type some text here"></textarea><br />
      <input type="submit" value="Submit"/>
    </form>
  </body>
</html>

GET vs POST: qual método usar

O atributo method controla como o navegador envia os dados do formulário. Os dois valores comportam-se de forma bastante diferente:

method="get" acrescenta os dados do formulário à URL do action como uma string de consulta (?name=value&name=value). Use quando:

  • A submissão apenas ou filtra dados (formulários de pesquisa, filtros).
  • Pretende que o resultado seja guardado nos favoritos ou partilhável — os dados ficam visíveis na URL.

Como os dados ficam na URL, o GET tem limitações reais: o comprimento da URL é limitado pelos navegadores e servidores, os valores são visíveis na barra de endereço e nos registos do servidor, e nunca deve transportar palavras-passe ou outros dados sensíveis.

method="post" envia os dados do formulário no corpo do pedido HTTP, e não na URL. Use quando:

  • A submissão altera algo no servidor (criar uma conta, publicar um comentário, efetuar um pagamento).
  • Estiver a enviar grandes quantidades de dados ou ficheiros (o POST não tem limite de tamanho prático e é necessário para envio de ficheiros).
  • Os dados são sensíveis e não devem aparecer na URL.

As submissões POST não são guardáveis nos favoritos e recarregar a página de resultado normalmente volta a acionar o pedido. Leia mais em métodos HTTP.

Envio de ficheiros

Para permitir que os utilizadores façam upload de ficheiros, o formulário deve usar method="post" juntamente com enctype="multipart/form-data", e incluir um <input type="file">. A codificação padrão application/x-www-form-urlencoded não consegue transportar dados binários de ficheiros, portanto o upload não funcionará sem isso.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/upload" method="post" enctype="multipart/form-data">
      <label for="avatar">Choose a profile picture:</label><br />
      <input type="file" id="avatar" name="avatar" accept="image/png, image/jpeg" /><br /><br />
      <input type="submit" value="Upload" />
    </form>
  </body>
</html>

Note que o atributo accept (a lista de tipos de ficheiro permitidos) pertence ao elemento <input type="file">, e não à tag <form>.

Ignorar validação com novalidate

Por padrão, os navegadores validam restrições como required, type="email" ou pattern antes de submeter o formulário. Adicionar o atributo boolean novalidate na tag <form> diz ao navegador para ignorar essa validação integrada e submeter mesmo assim — útil, por exemplo, quando trata a validação manualmente com JavaScript.

<!DOCTYPE html>
<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body>
    <form action="/form/submit" method="post" novalidate>
      <label for="email">Email</label>
      <input type="email" id="email" name="email" required /><br /><br />
      <input type="submit" value="Submit" />
    </form>
  </body>
</html>

Atributos

AtributoValorDescrição
accept-charsetcharacter_setEspecifica as codificações de caracteres que o servidor aceita para os dados do formulário submetido.
actionURLA URL para onde os dados do formulário são enviados para processamento — normalmente um endpoint de API ou uma rota do servidor. Omita (ou defina como string vazia) para submeter à mesma página que contém o formulário.
autocompleteon / offAtiva ou desativa o preenchimento automático dos campos do formulário pelo navegador. O padrão é on.
enctypeapplication/x-www-form-urlencoded / multipart/form-data / text/plainDetermina como os dados do formulário são codificados antes de serem enviados. O padrão é application/x-www-form-urlencoded. Use multipart/form-data quando o formulário contiver upload de ficheiros. Aplica-se apenas quando method é post.
methodget / postEspecifica o método HTTP usado para submeter o formulário. O padrão é get. Consulte GET vs POST abaixo.
nametextDefine o nome do formulário, usado para referenciar o formulário em scripts.
novalidatenovalidateQuando presente, o navegador não valida os campos do formulário antes de submeter.
target_blank / _self / _parent / _top / framenameDetermina onde exibir a resposta recebida após a submissão do formulário.

A tag <form> também suporta os atributos globais e os atributos de evento.

Prática

Prática
Quais dos seguintes métodos são usados para enviar dados de formulário em HTML? (Selecione todos os que se aplicam)
Quais dos seguintes métodos são usados para enviar dados de formulário em HTML? (Selecione todos os que se aplicam)
Prática
Qual valor de enctype é necessário quando um formulário faz upload de um ficheiro?
Qual valor de enctype é necessário quando um formulário faz upload de um ficheiro?
Prática
O que especifica o atributo action de um formulário?
O que especifica o atributo action de um formulário?
Was this page helpful?