Formulários Acessíveis

Introdução

Formulários coletam informações e dados a serem processados. É difícil o entendimento dos aspectos de acessibilidade relacionados aos formulários. Conteúdos estáticos do site serão facilmente visualizados e entendidos por usuários de leitores de tela ou até mesmo, talvez, por um computador Braille se cosiderarmos que você usou uma marcação semântica e bem estruturada (tal como h1 - h6 para cabeçalhos). Ler ou deixar de ler um conteúdo estático no site é uma atitute passiva do visitante, mas ao encontrar um formulário o usuário quer interagir com ele e de repente muda-se um campo - é uma via de duplo sentido. Para formulários, a marcação torna-se crucial para a correta captura de informações do usuário.

Elementos HTML usados

Os elementos HTML usados para marcação de formulários são:
  • O elemento
    (o "container" para os elementos a seguir);
  • - podem ser de variados tipos como: texts, submit, button, radio button e checkbox;

button
Não se aplica (usar atributo)


Mas , e a acessibilidade?

O quê? Oh sim, nada se disse sobre as "tags de acessibilidade". Acredite em nós, seguindo as diretrizes acima e construindo seus formulários de acordo com os princípios CHI, eles serão mais acessíveis ecumprirão melhor sua finalidade. Até aqui mostramos as boas práticas e como manter as coisas simples e sem complicações (aprofundaremos neste fundamento mais adiante). E, com o propósito de manter as coisas simples, devemos considerar como usar (ou não usar) scripts para construir formulários mais acessíveis.

Scripts

Considere que scripts estão desabilitados no lado do usuário

Um formulário deve cumprir sua finalidade independentemente de scripts estarem ou não habilitados no browser (ainda que eles suportem scripts - lembre-se que alguns dispositivos adaptados não suportam scripts). Validação e manipulação de dados no lado do servidor possibilita o funcionamento de formulários independentemente de scripts no lado do usuário. Muitos desenvolvedores ainda se utilizam largamente de scripts no lado do cliente para validação, ou mesmo disparadores de eventos (observe a seguir um formulário, cujo funcionamento é totalmente dependente de scripts estarem habilitados no lado do usuário:
e uma maneira alternativa não dependente de scripts que cumpre a mesma finalidade:
Assegure-se de que seu formulário funciona com scripts desabilitados - entregue a tarefa ao servidor!

Evite usar JavaScript para navegação

Por outro lado quais as implicações de se usar JavaScript que desencadeia no formulário uma ação fora do controle do usuário? O exemplo clássico ocorre com um elemento de formulário do tipo "drop-down-list" usado como ferramenta para navegação. Muitos sites utilizam este recurso que consiste em ao usuário selecionar um item do menu, automaticamente abre-se a página selecionada. Para usuários impossibilitados de usar mouse (pessoas cegas navegando com leitores de tela, pessoas com restrições motoras e outros casos mais) o uso do menu torna-se muito difícil (ou mesmo impossível).
The options in this dro-down list are difficult, if not impossible, to use without a mouse
Usar o teclado para tentar selecionar as opções da lista não terá efeito, pois resultará sempre em seleção e ativação do primeiro item da lista. A tentativa de encontrar uma solução inteligente resultou em uma armadilha para a acessibilidade. Mantenha as coisas simples - use uma lista "drop-down-list" sempre que assim desejar, mas forneça um botão "Go" (Ir) para o usuário ativar sua seleção, conforme mostrado abaixo:
Drop-down list made accessible by addition of a Go button

Uma observação sobre tabelas

Uma outra questão envolvendo a acessibilidade em formulários, diz respeito ao uso de tabelas para se conseguir um layout alinhado e certinho. Esta prática não implica necessariamente em um problema de acessibilidade, mas poderá vir a causar problemas - um layout de formulário baseado em tabela é irrelevante para um leitor de tela, o conteúdo é lido na ordem em que foi escrito no código fonte. Se você dispor seu layout de formulário, agrupando os rótulos descritivos e os controles do formulário você "quebrará" o relacionamento entre eles. Isto pelo fato de que leitores de tela ' linearizam' as tabelas e interpretarão erroneamente o formulário, conforme exemplo mostrado na imagem a seguir:



Table layouts for forms can confuse screen readers if you are not careful

Para que serve a tag label?

O elemento LABEL funciona como uma espécie de indicador de caminho a seguir. Ele diz ao agente de usuário: "Hey, você está vendo aquele campo ali? Aquele de nome 'firstname'? Bem, aquele campo é meu, e, por favor não não faça confusão com ele nem comigo. Ou, em código XHTML seria assim:



Isto cria um inconfundível relacionamento entre o texto (rótulo descritivo) e o campo, relacionamento este que só será quebrado se você introduzir erro na marcação do código (notadamente quando aplicada a técnica de copiar-colar um código pronto e depois esquecer-se de mudar alguma id - lembre-se ids devem ser únicas, você não pode ter mais de um elemento em uma página com a mesma id).
Se for de sua conveniência, agora você pode alterar a ordem entre texto e campo sem causar confusão para os dispositivos adaptados, pois eles continuarão a entender qual texto refere-se a que campo:


O uso do elemento LABEL acrescenta um benefício adicional não tão óbvio a primeira vista - muitos browsers renderizam o conteúdo da tag como uma área clicável para levar o foco para o campo relacionado. Isto é particularmente útil para checkboxes e radio buttons que têm uma área reduzida de seleção:

Hit area increased by label tag

Onde posso usar Label?

A tag pode ser usada para todos os elementos de formulário, exceto para os elementos buttons (seu funcionamento independe de links externos). Abaixo uma tabela exemplificando o uso da tag:

Form element looks like Coded like:

First Name:


id="txtFirstName" value="">

Age:


Age:

id="radAge4_0"

value="Under30"> Under 30

id="radAge4_1" value="Over30"> Over 30


What colours do you like:




What colors do you like:

id="chk0_0"

value="red"> red

id="chk1_1" value="green"> green

id="chk2_2" value="blue"> blue

id="chk3_3" value="purple"> purple




Your life story:





Favorite Town:


>





Agrupando elementos do formulário

Você já tinha ouvido falar de
e ? Não? Então deixe-me apresentá-los à você...

O elemento Fieldset

Imagine uma lista de 50 checkboxes com opções de variados assuntos no qual você tenha que examinar todos, para escolher o(s) que interessa(am). Eu não ficaria aborrecido - e você?
Tem um ditado que diz: "Dividir para vencer'', e temos um amigo no XHTML, o elemento FIELDSET.
Usando FIELDSET você divide seus 50 itens, em digamos, 5 grupos de tópicos claramente identificáveis, cada um deles com 10 propriedades/atributos comuns. Você incrementa a usabilidade/acessibilidade fazendo sua página mais clara para usuários com deficiências visuais, ou usuários com restrições cognitivas.
Leitores de tela, quando oferecem suporte para este elemento, o fazem ainda de maneira precária, tornando questionável sua utilidade para usuários cegos. Contudo, o fato de ainda não haver total suporte para este elemento em dispositivos adaptados, não é justificativa para não empregá-los. Ao contrário, as boas práticas aconselham seu emprego desde já e com vistas ao futuro quando houver pleno suporte.
Abaixo um exemplo do emprego de FIELDSET (em conjunto com LEGEND - que vem a ser o texto 'My Radio Buttons' descritivo do conteúdo da caixa (ou seja, do fieldset):

Example of a fieldset
O código de marcação do exemplo acima é:


My Radio Buttons

Como acontece com a maioria dos elementos HTML, você pode usar CSS para estilizar FIELDSET de acordo com suas preferências, como o exemplo mostrado na figura abaixo:
A CSS-styled fieldset
FIELDSET pode ser usado para agrupar qualquer variedade de elementos input de formulários - e não um agrupamento único como mostrado acima. É perfeitamente legal usar fieldsets aninhados sempre que necessário, como mostrado na figura (um formulário bem simples) abaixo:

Nested fieldset

O elemento Optgroup

Da mesma forma como você pode agrupar inputs de um formulário, pode também agrupar as opções de uma tag usando a tag . Observe o código de marcação abaixo:
 

Você percebeu como foi escrito o código acima?
A lista do tipo "drop-down list" foi agrupada por tipos de alimentos. Alguns browsers renderizam corretamente o elemento optgroup e outros simplesmente o ignoram. Mas, assim como ocorre com fieldset, a falta de suporte por alguns browsers e dispositivos adaptados, não é justificativa para não usá-lo.


Example of Optgroup in Safari and Firebird browsers
Obs: não confunda a tag com o atributo label (usado na tag ) !

Usando um mouse é muito fácil saber onde você está em uma página web. E, isto torna-se muito mais fácil se você aumentar visualmente o tamanho do cursor e habilitar o "mouse trails" (se esta facilidade estiver disponível no seu Sistema Operacional). Se você não tiver restrições visuais mas não for capaz de usar um mouse, por um motivo qualquer, terá que valer-se de um teclado para navegar e neste caso não terá qualquer tipo de aviso sonoro, como os de leitores de tela, para informá-lo onde você está na página Web. Em alguns casos será difícil distinguir visualmente onde se encontra o foco na tela. Os browsers devem renderizar uma linha pontilhada ao redor do elemento de formulário que recebe o foco, mas você poderá tornar este destaque para o foco bem mais fácil de ser visualizado...
Em Cascading Style Sheets Level 2 (CSS2), existe a pseudo propriedade focus que pode ser aplicada a qualquer elemento HTML, mas é particularmente eficaz quando empregada em formulários. Não é amplamente suportada por todos os browsers, mas funciona nos brownsers Mozilla. A regra CSS a seguir:

input:focus, select:focus, textarea:focus {
  background:red;
  color:white; 
  }
... resulta em um excelente indicador visual do local onde você está a medida que se desloca pelos do formulário, tornando-o muito mais fácil de usar e interagir com qualquer um que tenha restrições motoras:

Field in focus is clearly visible

Accesskeys nos campos Inputs e os Labels

Uma accesskey (NT: atalho de teclado ) é teoricamente uma eficaz ferramenta de acessibilidade a ser usada em web sites. Lamentavelmente, neste caso, na prática a teoria não funciona. A teoria é simples - você escolhe um atalho de teclado para cada um dos elementos do formulário, possibilitando assim, um acesso rápido ao elemento. Por exemplo, para um campo de busca localizado no topo da página decidimos escolher a letra 's' como accesskey.
accesskey="s"
/> Na prática, os diversos browsers e dispositivos especiais de usuários, se utilizam de accesskey para navegação. Consequentemente, se você deseja usar accesskey="f" para um campo de formulário a ser preenchido com o primeiro nome do usuário, o accesskey simplesmente não vai funcionar como você espera. Por que? Porque ao pressionar alt + f (alt normalmente é usado em conjunto com a letra para ativar o accesskey) você trará para a tela o menu file (arquivo) do seu browser.
Você pode aplicar o accesskey tanto ao elemento como ao elemento . O problema é que não há como o usuário saber que estamos usando um accesskey (somente o browser iCab fornece uma dica da existência do accesskey). Uma maneira sugerida para prover uma informação visual da existência do acesskey é adotar a técnica usada em aplicações Windows (conhecida como 'chave aceleradora'), que consiste em sublinhar a letra que representa o acesskey:

E, estabeleça uma regra para a classe accelerator que coloque um efeito sublinhado (não se limite a usar simplesmente a tag para destacar o acesskey!).
.accelerator {text-decoration:underline;}

Mensagens de erros

Várias são as maneiras de se tratar os erros cometidos pelo usuário ao preencher um formulário.
  1. Pode-se usar um script no lado do cliente (JavaScript), que reporta erros de preenchimento incorreto do formulário. Contudo, para garantir que sua página seja acessível, você deve evitar esta prática, pois caso JavaScript esteja desabilitado ou não disponível na aplicação do usuário, este método não vai funcionar. Em consequência...
  2. Use outro método no lado do servidor como backup para reportar erros de preenchimento.

mensagens de erros no lado do cliente

Vamos supor que o browser está com Javascript habilitado (caso contrário vá para o título seguinte: MENSAGENS DE ERROS NO LADO DO SERVIDOR). Neste caso existem vários scripts que detectam e tratam erros de preenchimento, mas o detalhamento e estudo de scripts está fora do escopo deste artigo. Alguns caminhos criados pelos scripts são mais acessíveis que outros e isto veremos a seguir.
Frequentemente usa-se JavaScript para validar formulários de modo a que todos os erros cometidos sejam coletados e apresentados ao usuário em um grande alerta único, como mostrado abaixo:




Big alert box containing lots of information.

Agora, considere receber de uma só vez está quantidade de erros ou talvez até uma lista maior ainda quer visualmente na tela, quer sendo lida por um leitor de tela. Irritante não é mesmo? Mas, então o que fazer?
Um método melhor seria alertar o usuário a medida que o erro for detectado e encaminhá-lo de volta ao campo preenchido incorretamente para ser corrigido e assim por diante um a um para todos os campos validados. Com JavaScript habilitado, você pode valer-se dele para fazer voltar o foco ao campo preenchido incorretamente e talvez até adicionar algum texto default ao campo bem como selecioná-lo:


A smaller alert that is easier to take in, react to.\

document.forms['"personaldetails"].fullname.value="Please enter your full name";
document.forms['"personaldetails"].fullname.select();


Você poderá ainda usar JavaScript para destacar o campo, incrementando a acessibilidade para pessoas não completamente privadas de visão, mas com alguma necessidade visual. Quem sabe uma borda em negrito ao redor do campo? Ou, talvez um cor contrastante para fundo do campo?
Alguns dirão que este método é repetitivo e enfadonho, quando um número considerável de erros é cometido. Na verdade, para alguns usuários, este método pode tornar-se uma grande dor de cabeça, mas você deverá fazer uma análise e julgamento de quanto a acessibilidade está trabalhando contra a usabilidade, considerando principalmente seu público.

mensagens de erros no lado do SERVIDOR

Uma vez processado um formulário e encontrado erros de preenchimento, o método usual é o de apresentar-se no topo de uma página, um sumário dos erros encontrados destacando-se os locais onde encontrados os erros. Este método parece OK, contudo se pensarmos em um leitor de tela a informação dos erros não será tão óbvia. ("O que houve? Eu enviei o formulário e recebi de volta a mesma página? O que está acontecendo?...".
Um "truque" bem simples - Coloque um alerta no campo </code> da página (normalmente o primeiro texto que um leitor de tela lê ao entrar numa página), e repita o alerta no primeiro nível de cabeçalho da página.</p> <p> <code><title>Alguns dados estão incorretos ou faltando no formulário que você acabou de preencher : Detalhes adicionais
No sumário dos erros encontrados forneça um link encaminhando para o campo do formulário a ser corrigido. Isto evita que o usuário tenha que percorrer todo o formulário a procura dos campos incorretos.
"Aha,"diria você , "e se existirem cinco erros ? Ao clicar no link para correção este levaria ao primeiro campo a ser corrigido e os outros campos?"
O último recurso a se pensar é o de obrigar o usuário a ir e vir de um local a outro na sua página e para isto eu não sugiro a você implementar um link tipo "voltar ao topo da página" para as correções. Contudo, como o ir e vir torna-se necessário, você poderá tornar a tarefa menos enfadonha, informando ao usuário quantos são os erros a serem corrigidos:


5 errors listed for the user

Mas, talvez exista algo mais radical a se fazer? Em lugar de retornar ao usuário sempre a mesma página com campos corrigidos e campos a corrigir ou completar você poderá fazer o seguinte:
  • capturar os dados preenchidos corretamente e armazená-los
  • retornar ao usuário somente os campos com erros para correção
Em lugar de retornar o formulário completo para que o usuário vá aos campos a corrigir, você retorna simplesmente o conjunto dos campos com erros a corrigir.


Referência:

http://maujor.com/tutorial/formac-a.php

Nenhum comentário:

Postar um comentário