Falar em código semântico, tableless, css e como tudo isso se envolve com a W3C pode ser para alguns um grande quebra-cabeça. Na verdade é, mas com um pouco de vontade, teoria e paciência, esses itens podem se transformar numa verdadeira filosofia de trabalho e depois de um aprendizado bem realizado, tornar a produtividade do dia-a-dia um verdadeiro desafio estimulante.
Resumidamente, compreender a utilização correta dos elementos é um passo extremamente saudável para relembrarmos como tudo foi concebido originalmente para ser utilizado e tornar o trabalho simples e mais claro para todos.
O assunto pode ser um verdadeiro martírio para desenvolvedores, que por muitas vezes se auto absolvem da adequação aos padrões web, construindo aplicações e sites que poderiam ser mais leves, mais responsivos, fáceis de usar, e por conseqüência, mais fáceis de atualizar.
Um exemplo muito utilizado atualmente para mostrar como é possível construir mais simples são os menus para sites, sejam horizontais ou verticais, existe uma maneira muito limpa, verdadeiramente semântica e intuitiva para mecanismos de buscas como o Google.
Uma recomendação que faço para a construção de sites e aplicações é começar pela informação e não layout, pois iniciando seu projeto pela estrutura da informação, a possibilidade do projeto perder o foco é muito menor,além disso, como sabemos, hoje o conceito tableless permite a aplicação de layouts como uma camada sobre o seu código.
Falarei aqui sobre a criação de menus utilizando listas, e listas obviamente tem uma série de utilidades que devem ser tratadas de forma específica caso a caso, o que significa que se usada corretamente, torna seu código naturalmente semântico.
Para compreender listas é importante saber que existem várias opções de utilização para elas, como vemos abaixo:
1.Listas ordenadas
<ol>
<li>Ricardo</li>
<li>Felipe</li>
<li>Manoela</li>
</ol>O resultado para a lista acima é:
1. Ricardo
2. Felipe3. Manoela
Note que pelo fato de termos utilizado as tags corretas, os itens foram automaticamente ordenados e numerados (esse comportamento é padrão, podendo ser personalizado por CSS).
2. Listas não ordenadas
<ul>
<li>Ricardo</li>
<li>Felipe</li>
<li>Manoela</li>
</ul>O resultado agora é:
o Ricardo
o Felipeo Manoela
Note que esse modelo não numera automaticamente os itens, mas por padrão os marca como itens de uma lista (também é comportamento padrão que pode ser alterado por css).
3. Listas de descrição
<dl>
<dt>Livro</dt>
<dd>Descrição do livro</dd>
</dl>O resultado:
Livro
Descrição do livroAté aqui você já tomou conhecimento de como as listas funcionam dentro do código html, então não vai ter problemas para entender o código abaixo, pois na verdade o segredo estará no css que aplicaremos a lista.
<ul class="menu_vertical">
<li><a href="#">Home</a></li>
<li><a href="#">História</a></li>
<li><a href="#">Filosofia</a></li>
<li><a href="#">Produtos</a></li>
<li><a href="#">Contato</a></li>
</ul>Note que definimos em ul utilizará a classe menu_vertical, vamos ao código CSS que faz tudo acontecer como desejamos:
<style type="text/css">
ul.menu_vertical {
margin: 0;
padding: 0;
list-style: none;
}
ul.menu_vertical li a{
display: block;
padding: 10px;
color: #333;
background: #eee;
border-bottom: 1px solid #fff;
text-decoration: none;
}
ul.menu_vertical li a:hover {
background: #ccc;
}
</style>Note que o código CSS é bem simples, mas tem parâmetros chaves importantíssimos que são em "ul" a redução de margin e padding para 0 (zero), pois essa tag tem por padrão valores positivos setados nela; o display: block na tag "a" permite que a área de clique seja maximizada para toda a área disponível dentro da tag li a qual ela está contida.

É importante lembrar que o menu terá automaticamente a largura máxima do seu objeto pai, porém é possível limitar sua largura a um valor específico setando o parâmetro width no CSS da tag ul.
Este modelo utiliza praticamente o mesmo código, com pequenas modificações, veja:
<ul class="menu_horizontal">
<li><a href="#">Home</a></li>
<li><a href="#">História</a></li>
<li><a href="#">Filosofia</a></li>
<li><a href="#">Produtos</a></li>
<li><a href="#">Contato</a></li>
</ul>Só mudei o nome da classe, note que o html continua exatamente o mesmo. Vamos ao CSS:
ul.menu_horizontal {
margin: 0;
padding: 0;
list-style: none;
}
ul.menu_horizontal li {display: inline;}
ul.menu_horizontal li a{
float: left;
display: block;
padding: 10px;
color: #333;
background: #eee;
text-decoration: none;
}
ul.menu_horizontal li a:hover {
background: #ccc;
}
Observe que é ai que entra o conceito moderno de personalização de layouts através de tableless, pois o html não foi alterado, apenas sua classe, e o código CSS foi o responsável pela mudança da aparência, deixando claro um conceito de camadas, cada uma com sua respectiva função.
As alterações no CSS que permitiram ao mesmo menu ter a aparência horizontal foi que na tag "li" aplicamos display: inline, pois assim ele deixa de ser nativamente um elemento de bloco e passa a ser um elemento de linha, não criando mais quebras de linha antes e depois dele mesmo (padrão a todo elemento de bloco), em seguida determinamos para "a" float: left, o que significa que as tags "a" estarão posicionados lado a lado, a partir da esquerda para a direita.
Os trechos CSS apresentados acima podem ser personalizados eternamente a gosto e necessidade da sua aplicação. Não se esqueça que o CSS dá a você o controle sobre a aparência da sua página ou aplicação.
O importante no conceito tableless é escrever simples, sem complicação, sem redundância e sempre, mas sempre que possível procure rever seu código a busca de limpeza e redução de conteúdo desnecessário.
Para saber mais as incríveis variações de CSS que se pode fazer com listas, você não pode deixar de visitar este site: Listamatic (http://css.maxdesign.com.au/listamatic/).
Seja simples, faça um trabalho limpo e torne-se mais produtivo, antes que seus concorrentes o façam.
Até a próxima!
Monia Gomes
Parabéns pelo tema escolhido! Conteúdo simples, bem explicado e direto! É realmente importante ver que a semântica pode ser tratada com atenção que o assunto merece!
Marcio Toledo
Tenho uma dúvida, construí um menu assim.. porém gostaria de saber como posso fazer para otimizar esse menu e ele fique leve uma class "active" caso esteja com esse item do menu aberto.
Roberto Rabadan
É preciso entender melhor o seu caso Marcio, mas vou tentar adiantar algumas soluções. A pseudo classe active determina uma opção a mais quando seu link estiver sendo clicado, mas o seu estado só vale enquanto o mouse estiver clicando sobre o item, assim que vc terminar o clique, o efeito desaparece. Para marcar definitivamente seu item selecionado vc pode optar por trabalhar com programação javascript ou tratar dentro da sua própria linguagem de desenvolvimento, fazendo com que por exemplo, uma classe diferente seja definida para esse item ao clicá-lo, ou ainda que ao carregar uma página específica, a classe para aquele respectivo item seja diferente.
Roberto Rabadan
Ah! É importante lembrar que o comportamento da pseudo classe active é um pouco diferente no IE, o item clicado permanece com a classe mesmo depois do clique, no entanto desaparece se vc clicar em outro lugar na página, ou se o resultado do clique for um reload da página... Por isso, a solução depende mesmo do contexto onde será aplicada... []'s
Adriano de Freitas
Excelente artigo. De forma simples, pude testar e entender a construção do menu. Testei tanto na vertical qto na horizontal e o resultado é excelente. Pude entender a classe active perfeitamente e a diferença de funcionamento no IE e no Firefox. Meus parabéns pelo artigo.
Ivan Celso
Gostaria de saber como faço um menu de lista vertical, mas que ao lado apareça submenu com a pagina principal do imasters ! vai em programação e ao lado aparece os tipos de programação !
Roberto Rabadan
Olá Ivan! A construção de menus com submenus não é muito diferente da estrutura acima, porém possui algumas características diferentes em relação ao css e utiliza também javascript. Na verdade é um assunto que merece ser tratado a parte, quem sabe numa outra matéria. Utilize a opção fale com o autor e envie seu e-mail, terei prazer em enviar um exemplo dessa solução para vc. []´s
Luis Felipe S. Silva
Desculpa, mas ... cade o PHP !?
Alex da Silva de Jesus
Boa Noite Roberto,
Apesar da simplicidade de seu artigo, ele é bem prático e ideal para aqueles que estão começando ou até mesmo para alguns que já têm um certo tempo, mas não procuram se aprimorar. Parabéns pelo artigo, desejo sucesso.
2001 - iMasters FFPA Informática Ltda - Todos os direitos reservados.