Semântica de Formulários

Por: Henrique C. Pereira

Publicado em Saturday 10 September 2005 às 13:52

Categoria: HTML/CSS/JScript

Eu sei que diversas pessoas já escreveram sobre tópicos como este, em outros lugares. Mas quero concentrar o máximo de informações sobre semântica web e webstandards quanto possível, sem ter que reinventar a roda aqui no Revolução Etc. Pois esta é a minha versão sobre semântica de formulários.

As tags relacionadas aos formulários são <form>, <fieldset>, <legend>, <label> e os controles do tipo <button>, <input>, <select> e <textarea>. Não vou me ater neste artigo sobre os tipos de controles que podem ser utilizados e suas funções, e sim o outro conjunto de tags que podem ser usadas em um formulário.

A tag <form> é necessária para qualquer tipo de entrada de dados que seu site tiver. Há várias maneiras de ser organizar os forms em uma página e cada programador possuiu seus métodos como ter um form por página ou ter vários para vários conjuntos de forms. Não vou me ater a estas coisas.

As principais tags que devem ser observadas aqui são <fieldset>, <legend> e <label>.

Um formulário padrão pode ter esta aparência:


<form id="demonstracao" method="post" action="">
     <fieldset>
         <legend>Título do Form</legend>
         <label for="exemplo">Exemplo</label>
         <input type ="exemplo" size="20" />
         <input type="submit" id="inserir" value="submit" />
    </fieldset>
</form>

<fieldset>

A tag <fieldset> te permite ter o controle sobre um grupo de formulários. Por exemplo, em uma página de currículo em um site você pode dividir todos os campos em conjuntos nomeados por dados pessoais, formação e experiência profissional, por exemplo. Cada conjunto desses poderia ter uma <filedset> diferente e estar dentro do mesmo form. Esta tag cria um box, um quadro, em torno dos objetos que estão inseridos dentro dele. Esta tag é opcional e permite que você tenha um controle maior sobre o conjunto de forms. A aparência do box formado por esta tag, pode ser controlado por CSS e até ser excluído.

<legend>

A tag <legend> cria um título para um conjunto de forms. No exemplo anterior que eu dei para as divisões de um formulário de currículos, como dados pessoais, formação e experiência profissional, estes títulos devem estar dentro da tag <legend>. Assim como em uma tabela existe a tag <caption> para dar um título específico para a tabela, a tag <legend> pode ser utilizada para dar um título para um conjunto de forms.

<label>

A tag <label> deve ser usada sempre para dar um nome a um campo de controle. Em um formulário de contato, por exemplo, igual ao deste site, eu tenho os campos nome, e-mail, assunto e comentário. A ordem lógica de dispor estes dados é colocar o nome do campo e em seguida o próprio campo. A tag <label> deve ser usada sempre para inserir estes nomes de campos, sejam eles seguidos por <input>, <textarea>, <select> etc. Das três tags apresentadas acima, esta é a única que, se você utilizar algum tipo de formulário de entrada de dados no seu site, você não ficará sem a oportunidade de usar.

Se você não quiser agrupar um conjunto de forms usando <filedset> é porvável que talvez você não use a tag <legend>. Mas se existir pelo menos um único form no seu site, como um campo de busca, você deverá usar <label> na busca.

Comentários dos leitores

Este artigo possui 11 comentários

  1. Fred Saturday 10 September 2005 às 19:53

    Legal…..

    mas cade aquele negocio q ficava do lado esquerdo da página para aumentar o texto? :(

  2. Maudy #1° Monday 12 September 2005 às 08:32

    Use CTRL + (tecla MAIS) do seu Firefox.

  3. Evandro Pastor #2° Thursday 29 December 2005 às 14:25

    Muito bacana essa matéria, estou acompanhando toda a série. Mas estou com um problema: não consigo organizar o layout do formulário com css. Eu tento usar as tags label e input pra tentar organizar mas só pioro as coisas.

  4. Rafael Dourado #3° Tuesday 10 January 2006 às 15:12

    Okay, entendi tudo. Mas como eu faço no caso de um grupo de checkboxes? Por exemplo, dentro de um Fieldset com Legend "Dados Pessoais" eu tenho dois RadioButtons chamados Masculino e Feminino e antes deles o texto "Sexo:". Para masculino e feminino eu uso Label apontando para os respectivos campos, mas e em "Sexo:"? , , ?

  5. Bruno Lourenç #4° Thursday 31 August 2006 às 12:21

    Cara vc tem um erro em: ( < input type ="exemplo" )

    O que vc acha dessa semântica?

    Título do Form

    Exemplo

    Exemplo 2

  6. jeferson Silva #5° Tuesday 08 May 2007 às 13:40

    Muito Legal as tag de seu site gostei muito e tambem aprendi muito

  7. Matheus de Oliveira #6° Sunday 16 September 2007 às 12:05

    Ops…

    Por favor, exclua o comentário acima, esqueci que não dá pra por tags, então vou trocar as tags por []:

    Em:

    [input type ="exemplo" size="20" /]

    Você não quis dizer:

    [input type="text" id="exemplo" size="20" /]

    ??

    Ótima explicação, você é fera…abços

  8. danielle #7° Monday 17 September 2007 às 13:27

    acho qe houve um erro nesse trecho:

    Exemplo

    na realidade o atributo tyte="text" e deve conter um atributo id="exemplo" onde o valor deve ser igual ao que estiver dentro do for.

  9. Pingback: » Tableless, o termo maldito ? | Igor Escobar // Blog | Desenvolvimento, Tecnologia e Informação, na ponta do lápis.

  10. Almino Melo #8° Thursday 21 October 2010 às 06:46

    No livro Use a Cabeça XHTML com CSS é recomendada o uso de tabelas para formulários simples como esse, de comentário. O que você pensa sobre isso?

  11. Danielle #9° Thursday 21 October 2010 às 11:38

    Na minha opinião, está errado, seee vc quiser trabalhar com padrões Web.

Deixe seu comentário:

Observação: Todos os campos obrigatórios estão marcados com um asterisco (*).

  1. As seguintes tags podem ser inseridas nos comentários: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Sobre este blog

Meu nome é Henrique C. Pereira e o Revolução Etc é o meu blog pessoal. Eu trabalho com design de interfaces, dispositivos móveis, planejamento de soluções web, arquitetura da informação, programação de interfaces, acessibilidade, padrões web, e-commerce e outras coisas relacionadas.
Leia mais sobre o autor.