Felipe de Albuquerque
Posts Tagged menu acessível
Menu Drop Down Acessível
Por Felipe de Albuquerque na categoria Acessibilidade em 19 de outubro de 2009

Soluções inclusivas, em minha opinião são vitais para profissionais não só da web.
Entre tanto o que se vê por ai não é exatamente isso, mas se você está lendo este texto é porque você está há vários passos na frente de outros profissionais, e está com o pensamento certo e inclusivo.
Esta solução de menu acessível é muito fácil e funciona bem em vários navegadores como no IE6 + e em todos os browsers que dão suporte a web Standards. Funciona com teclado e mouse, e se o JavaScript estiver desabilitado dá pra acessar todos os links, mas os subitens não aparecem visualmente.
Veja o menu funcionando e vamos aos detalhes:
XHTML
É o documento de marcação onde vamos criar os nós do menu.
Vamos criar uma lista não ordenada “ul” e seus respectivos filhos e adicionar id e classes para podermos manipular alguns elementos.
<!-- As tags como o DOCTYPE, head, body e demais não vou descrever aqui para o post ser mais objetivo -->
<ul id="nav">
<li><a href="index.html">Home</a></li>
<li class="submenu"><a href="#" class="bullet">Portfólio</a>
<ul>
<li><a href="sites.html">Sites</a></li>
<li class="submenu"><a href="#" class="bullet">Interfaces</a>
<ul>
<li><a href="graficas.html">Gráficas</a></li>
<li><a href="digitais.html">Digitais</a></li>
</ul>
</li>
</ul>
</li>
<li><a href="quemsomos.html">Quem Somos</a></li>
<li><a href="contato.html">Contato</a></li>
</ul>
CSS
É o documento de apresentação, onde vamos posicionar e dar beleza ao nosso menu.
Aqui é onde você provavelmente ira mexer mais, para poder customizar seu menu acessível.
#nav, #nav ul {
width: 70em;
list-style: none;
font: bold 12px Verdana, Arial, Helvetica, sans-serif;
padding: 0;
margin: 0;
}
#nav li {
float: left;
}
#nav a {
display: block;
width: 10em;
height: 2em;
line-height: 2;
text-align: center;
text-decoration: none;
background-color: #69c; /* IE precisa desta declaração */
color: #fff;
border: 1px solid #ccc;
border-width: 0 1px 1px
}
#nav a:hover {
text-decoration: none;
background: #c7daec;
color:#69c;
}
#nav a.bullet {
background:#69c url(bullet.gif) no-repeat right;
}
#nav a.bullet:hover {
background: #c7daec url(bullet-over.gif) no-repeat right;
}
#nav li ul {
position: absolute;
left: -1000em;
width: 10em;
margin: 0;
}
#nav ul ul {
margin: -2.1em 0 0 10.1em;
}
#nav li:hover ul ul, #nav li.over ul ul {
left: -1000em;
}
#nav li:hover ul, #nav li li:hover ul, #nav li.over ul, #nav li li.over ul {
left: auto;
}
JavaScript
O arquivo JavaScript é responsável pela ação.
É neste documento que vamos verificar os links e os subitens da lista e vamos fazer com que ele se encarregue em abrir os subitens.
<script type="text/javascript">
var dropdown_intervalId;
var dropdown_ulId = (!dropdown_ulId) ? 'nav' : dropdown_ulId;
var dropdown_delay = (!dropdown_delay) ? 0 : dropdown_delay;
function dropdown_init()
{
try
{
var as = document.getElementById(dropdown_ulId).getElementsByTagName('a');
for (var a = 0; a < as.length; a++)
{
as[a].onfocus = function() { dropdown_expand(this) }
as[a].onmouseover = function() { dropdown_expand(this) }
as[a].onblur = function() { dropdown_colapse(dropdown_delay) }
as[a].onmouseout = function() { dropdown_colapse(dropdown_delay) }
}
dropdown_colapse(0);
} catch(e){}
}
function dropdown_expand(caller)
{
try
{
clearInterval(dropdown_intervalId);
var uls = caller.parentNode.parentNode.getElementsByTagName('ul');
for (var ul = 0; ul < uls.length; ul++)
uls[ul].style.left = "-1000em";
caller.parentNode.getElementsByTagName('ul')[0].style.left = "auto";
} catch(e){}
}
function dropdown_colapse(milliseconds)
{
try
{
clearInterval(dropdown_intervalId);
dropdown_intervalId = setInterval(function()
{
var uls = document.getElementById(dropdown_ulId).getElementsByTagName('ul');
for (var ul = 0; ul < uls.length; ul++)
uls[ul].style.left = "-1000em";
clearInterval(dropdown_intervalId);
}, milliseconds, null);
} catch(e){}
}
window.onload = dropdown_init;
</script>
Esse menu foi tema de debate na lista Acesso Digital, e esse post foi baseado na resposta do Gil Porta membro da lista, e o menu foi desenvolvido por Alexandre Junqueira.
Acessibilidade, CSS, javaScript, menu acessível, web standards, XHTML
3 Comentários | Assine | Topo
Arquivos
- março 2010 (5)
- outubro 2009 (7)
- setembro 2009 (5)