Formulário Acessível

Desenvolvimento, Design, Javascript, jQuery Add comments

Hoje abordaremos um assunto importante, acessibilidade em formulários.
O que é acessibilidade segundo a W3C.
Link para referência http://www.w3.org/WAI/intro/accessibility.php
No site maujor temos acesso a este mesmo material em português.
Link para referência http://www.maujor.com/w3c/introwac.html
Segundo Nick Rigby criador desta técnica a vantagem de utilizarmos um formulário projetado desta forma. É a flexibilidade que ganhamos, podendo usar ele em vários projetos, mudando apenas a formatação, utilizando uma que se encaixe no layout do seu projeto.
A parte mais importante do nosso formulário é o html, para a construção dele usaremos as seguintes tags:
<fieldset>
<label>
<legend>
<ol>
<li>
<em>
Se você nunca utilizou estas tags, aconselho a ler a documentação da W3Schools.
Link para referência http://www.w3schools.com/tags/default.asp
Abaixo o nosso HTML 4.01 / XHTML 1.0.

<head>
<script src="lib/jquery-1.2.3.js" type="text/javascript"></script>
<script src="lib/cmxforms.js" type="text/javascript"></script>
<link rel="stylesheet" href="css/screen.css" media="screen" type="text/css">
</head>
<form class="cmxform" action="#"> Campos de preenchimento obrigatório. Contém<em>*</em>
<fieldset>
<legend>Acessibilidade em Formulário</legend>
<ol>
<li> <label for="name">Nome<em>*</em></label>
<input id="name" type="text" /></li>
<li> <label for="age">Idade<em>*</em></label>
<input id="age" type="text" /></li>
<li> <label for="height">Altura<em>*</em></label>
<input id="height" type="text" /></li>
<li> <label for="weight">Peso<em>*</em></label>
<input id="weight" type="text" /></li>
<li> <label for="email">E-mail<em>*</em></label>
<input id="email" type="text" /></li>
<li> <fieldset>
<legend>Aceita os termos de responsabilidade?<em>*</em></legend>
<label>
<input name="condition" type="radio" value="yes" /> Sim</label>
<label>
<input name="condition" type="radio" value="no" /> Não</label>
</fieldset></li>
</ol>
</fieldset>
<fieldset>
<legend>Outras informações</legend>
<ol>
<li> <label for="dob">Data do aniversário
<span class="sr">(Dia)</span><em>*</em>
</label>
<select id="dob">
<option value="1">1</option>
<option value="2">2</option>
</select>
<label class="sr" for="dob-m">Data do aniversário (Mês)
<em>*</em>
</label>
<select id="dob-m">
<option value="1">Jan</option>
<option value="2">Feb</option>
</select>
<label class="sr" for="dob-y">Data do aniversário (Ano)
<em>*</em>
</label>
<select id="dob-y">
<option value="1984">1984</option>
<option value="1985">1985</option>
</select>
</li>
<li> <label for="sex">Sexo <em>*</em></label>
<select id="sex">
<option value="female">Feminino</option>
<option value="male">Masculino</option>
</select>
</li>
<li> 
<fieldset>
<legend>Qual esporte você prática?</legend>
<label for="football">
<input id="football" type="checkbox" /> Futebol</label>
<label for="golf">
<input id="golf" type="checkbox" /> Golfe</label>
<label for="volley">
<input id="volley" type="checkbox" /> Vôlei</label>
<label for="tennis">
<input id="tennis" type="checkbox" /> Tênis</label>
<label for="basketball">
<input id="basketball" type="checkbox" /> Basquete</label>
<label for="boxing">
<input id="boxing" type="checkbox" /> Boxe</label>
</fieldset>
</li>
<li>
<label for="comments">Comentário</label>
<textarea id="comments" cols="25" rows="7"></textarea></li>
</ol>
</fieldset>
</form>

Abaixo nosso screen.css com os imports.

@import "reset.css";
@import "core.css";
@import "cmxTpl.css";
@import "cmxform.css";


Não irei postar todos arquivos css para não tornar o post muito extenso.
Para o funcionamento do nosso formulário, trabalharemos com a biblioteca javascript jQuery.
Link para download jQuery
Para contornar o bug de navegadores da fundação mozilla, que não interpretam corretamente a propriedade do css display:inline utilizaremos um script para atribuir o valor display: -moz-inline-box as tags <label>
Nosso cmxforms.js

// apply inline-box only for mozilla
if( jQuery.browser.mozilla ) {
// do when DOM is ready
$( function() {
// search form, hide it, search labels to modify, filter classes nocmx and error
$( 'form.cmxform' ).hide().find( 'li>label:not(.nocmx):not(.error)' ).each( function() {
var $this = $(this);
var labelContent = $this.html();
var labelWidth = document.defaultView.getComputedStyle( this, '' ).getPropertyValue( 'width' );
// create block element with width of label
var labelSpan = $("<span>")
.css("display", "block")
.width(labelWidth)
.html(labelContent);
// change display to mozilla specific inline-box
$this.css("display", "-moz-inline-box")
// remove children
.empty()
// add span element
.append(labelSpan);
// show form again
}).end().show();
});
};


Mesmo script utilizado no Bassitance mudei apenas a regra seletora li>label:not(.nocmx):not(.error)
Navegadores testados:

  • Safari 3.1.1
  • Internet Explorer 6
  • Internet Explorer 7
  • Firefox/2.0.0.14
  • Opera 9.27
  • Confira o resultado aqui

    Adicione ->del.icio.us | Reddit | Slashdot | Digg | Facebook | Technorati | Google | StumbleUpon | Windows Live | Tailrank | Furl | Netscape | Yahoo | BlinkList

    Leave a Reply

    WP Theme & Icons by N.Design Studio
    Entries RSS Comments RSS Log in