
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.
#1 by web on 24 de julho de 2010 - 16:09
Resumindo, não funciona onde mais se espera que funcione, no IE6 !
#2 by Felipe de Albuquerque on 25 de agosto de 2010 - 18:07
Acredito que você copiou o código incorrectamente.
Essa solução funciona bem em todos os navegadores.
pode testar