Barra horizontal superior.
Coluna vertical direita.
Esquerda - Conteúdo.
Gilberto Porta.
Marco Antonio de Queiroz - MAQ.
O uso de formulários é a forma mais comum para a prestação de serviços interativos. Também costuma ser o primeiro obstáculo sério na implementação de acessibilidade na web. A maior parte dos usuários utilizam os formulários com o mouse e o teclado, mas existem aqueles que só os manipulam por via do teclado, outros que precisam de indicações bem claras de como e onde preencher os dados, devido a possuírem baixa visão, ou ainda aqueles que fazem uso de softwares de varrimento de tela como é o caso das pessoas com deficiências neuromotoras graves.
Existem poucas coisas que podem tornar os formulários totalmente inacessíveis a quem usa apenas o teclado como forma de interação com um computador. Uma delas é o uso de javascript. É necessário ter alguns cuidados adicionais quando se faz uso de javascript para manipular dados de um formulário, para definir o foco em um controle, para alterar elementos, ou mesmo para submeter um formulário para processamento pelo servidor. Cada um destes aspectos pode tornar o formulário difícil ou mesmo impossível de preencher caso não seja possível usar o teclado. Observe sempre se aquilo que você consegue fazer com o mouse também consegue fazer usando apenas o teclado.
Os elementos básicos para a construção de um formulário são:
Com esses elementos básicos pode-se criar um formulário simples e organizado. Ele deve ser criado de uma forma lógica, na qual a sequência de preenchimento faça sentido e em que seja explicita a agregação dos diversos campos que o compõem. Os navegadores e leitores de texto possuem uma ordem de leitura e visualização desses elementos e seus rótulos. Por exemplo, ao encontrar um campo <input type="text"..., os leitores de tela esperam que o rótulo esteja antes do campo, mas ao encontrar um <input type="checkbox" ..., o leitor espera encontrar o rótulo depois do campo.
O objetivo desse texto não é o de mostrar como construir formulários, mas como podemos deixá-los acessíveis. Dessa forma, não iremos nos limitar às funções dos elementos e atributos de formulários, mas nos aprofundarmos nos elementos e atributos que permitam sua melhor visualização ou utilização por via do teclado, lembrando sempre que nosso intuito é o de construirmos uma web para todos e que, portanto, esse formulário deve estar estruturado e renderizado de maneira a servir adequadamente também às pessoas com baixa visão ou sem deficiências.
Nosso principal passo é a adição de elementos que garantam a acessibilidade dos formulários. Esses elementos são: label, fieldset, legend e optgroup. Além deles, determinadas configurações de alguns dados nos elementos comuns irão nos ajudar a deixar os formulários totalmente acessíveis.
O elemento label é utilizado em conjunto com os atributos "for" e "id" para relacionar de forma clara o elemento ao seu rótulo. Seu uso é obrigatório para que a visualização da entrada de dados e a leitura de um leitor de telas dessa entrada seja feita com facilidade em cada elemento do formulário, pois através dele o usuário sabe o que preencher naquela entrada e sua ausência significa erro grave de acessibilidade. Ele pode ser usado em conjunto com todos os elementos de formulário, exceto no elemento button.
Até há pouco tempo, era importante que
o elemento label
envolvesse o rótulo e o elemento de controle (input, select
etc).
Ex:
<label for="nome">Nome:
<input type="text" id="nome" name="nome" />
</label>
Note que, dessa forma, o elemento label foi aberto antes do rótulo e fechado depois do campo referido. Isso fazia com que o usuário de leitor de telas focasse de uma única vez o rótulo e o campo a ser preenchido. Entretanto, as tecnologias mais modernas já procuram o rótulo na hora da edição, podendo o elemento label ser fechado antes do campo, ex:
<label for="nome">Nome: </label>
<input type="text" id="nome" name="nome" />
Mas, no caso do rótulo precisar
ficar após à edição, abre-se o label
antes do input e fecha-se após o rótulo.
Ex:
<label for="ckb"><input type="checkbox" id=ckb" name="ckb" />Rótulo</label>
O elemento FIELDSET é utilizado para agrupar os itens
de formulários com características em comum e sempre deve
estar dentro do elemento form. Por exemplo,
um formulário para cadastro pode ter seus elementos
agrupados da seguinte forma:
Dados de identificação: Nome, sobrenome, endereço físico, endereço de
email;
O elemento legend é utilizado em conjunto
com o fieldset e deve estar dentro deste,
melhorando a acessibilidade e entendimento do usuário. Nesse caso,
toda vez que um campo for anunciado, será precedido do
conteúdo do legend.
Por exemplo: Em um formulário onde o legend seja
"Dados Pessoais", e os labels dos inputs
sejam "Nome", "endereço" e "Telefone", sonoramente leitores gráficos de qualidade
sonorizarão:
"Dados pessoais" "Nome" - Edição
"Dados pessoais" "Endereço" - Edição
"Dados pessoais" "Telefone" - Edição
Além, claro, da etiqueta visual com "Dados pessoais" que pode ser estilizada
no formulário para o melhor entendimento das divisões do mesmo.
O elemento optgroup é usado em conjunto com o elemento select. Trabalha de forma semelhante ao elemento legend no fieldeset, dando um título e agrupando os itens do elemento select, quando necessário. Cada elemento optgroup recebe um "label" que dará título ao grupo criado.
Ex:
<form id="form" method="post" action="">
<p>
<label for="lista-de-mercado">Lista de Mercado:<br />
<select name="select" id="lista-de-mercado">
<option selected="selected" value="1">Escolha um item</option>
<optgroup label="Laticíneos">
<option value="2">Leite desnatado</option>
<option value="3">Queijo ralado</option>
<option value="4">Queijo prato</option>
<option value="5">Requeijão</option>
</optgroup>
<optgroup label="Verduras">
<option value="6">Alface</option>
<option value="7">Alho</option>
<option value="8">Berinjela</option>
<option value="9">Cenoura</option>
<option value="10">Pimentão</option>
</optgroup>
</select>
</label>
</p>
</form>
Controle: <input type="text" size="zzz" value="xyz"
...
Função: introduzir um campo de edição.
Controle: <textarea ...
Função: Introduzir uma área editável de texto:
Exemplo de área de texto:
<label for="obs">Observações:
<textarea rows="z" cols="xxx" id="obs" name="obs">
área de texto</textarea>
</label>
Controle: <input type="radio"...
Função: Usados para situações de resposta de escolha única.
NOTA: para agrupar diversos botões e garantir que somente uma
opção seja marcada, usa-se o mesmo valor no atributo
name.
Exemplo de Botões de opção:
<form>
<fieldset>
<legend>Escolha um meio de transporte:</legend>
<label for="carro">
<input id="carro" type="radio" name="transporte"
value="carro">Carro</label>
<label for="barco">
<input id="barco" type="radio" name="transporte"
value="barco">Barco</label>
<label for="trem">
<input id="trem" type="radio" name="transporte"
value="trem">Trem</label>
</fieldset>
</form>
Controle: <select...
Função: Mostrar uma lista de elementos definidos pelo
desenvolvedor para que o usuário faça uma escolha.
Exemplo de select:
<label for="cidade">Escolha uma Cidade:
<select id="cidade" name="cidade">
<option value="BH">Belo Horizonte</option>
<option value="RJ">Rio de Janeiro</option>
<option value="SP">São Paulo</option>
</select></label>
Controle: <input type="image" ...
Função: permite construir botões gráficos com a mesma
funcionalidade do <input type="submit"...
Exemplo de um botão gráfico do tipo input="image":
<input type="image" alt="Enviar!" title="Enviar!" name="botao" src="enviar.gif" width="109" height="41"
/>
<form id="form" method="post" action="enviar.php">
<fieldset><legend>Dados para Contato</legend>
<label for="nome">Nome:<input type="text" name="nome" id="nome" value="*"
/></label>
<label for="email">E-mail:<input type="text" name="email" id="email" value="*"
/></label>
<label for="assunto">Assunto:<input type="text" name="assunto" id="assunto" value="*"
/></label>
<label for="msg">Mensagem:<textarea
rows="6" cols="500"
name="msg" id="msg">*</textarea></label>
<input type="submit" value="Enviar Mensagem" id="enviar" />
</fieldset>
</form>
Veja um exemplo de campo utilizando um script para apagar o valor do atributo value quando este for focado pelo mouse ou pelo teclado e o faz reaparecer quando o foco sair do campo sem ter sido preenchido:
<label for="busca">Pesquisar no site.
<input type="text" name="busca" id="busca"
title="Digite a palavra desejada (Tecla de atalho 0)"
accesskey="0" size="30" maxlenght="40" value="*"
onfocus="if (this.value == '*') {this.value='';}"
onblur="if (this.value == '') {this.value='*';}" />
</label>
Disponibilizado em: 06/10/2008.
Barra horizontal inferior.
Acessibilidade Legal - www.acessibilidadelegal.com
10025