Tableless - Desenvolvimento inteligente com Padrões Web

12/01/2010
Client-Side

Convertido – Menu (Livraria Cultura)

Reconstruindo o menu da Livraria Cultura.

Por


Fazer menus com CSS é relativamente simples. Não precisamos de muitas linhas de código para fazer um menu totalmente personalizado. O Menu da Livraria Cultura é feito com Tabela. Na verdade, todo o site deles é feito com Tabelas, mas esse é outro assunto.

Você pode ver o menu deles aqui.

O Código HTML do menu deles é:

DVDs CDs Games Hotsites Eventos

Eu não encontrei qual seria o pedaço do CSS referente ao menu, por isso eu não vou colar aqui.

O problema da versão do menu deles é que é todo feito com imagens e usa muita tabela. Há também código CSS inline. Isso prejudica leitores de tela, prejudica Google, e manutenção.
A versão que sugerimos é feita utilizando a técnica Image-Replacement. Segue abaixo o código HTML:


Abaixo o Código CSS:

* {
	margin:0;
	padding:0;
	list-style:none;
}

.nav {padding:10px;}

.nav ul li {float:left; position:relative;}

/* Define que todos os submenus aparecem quando passarmos o mouse no LI "pai" */
.nav ul li:hover ul {display:block;}

/* Define o estilo dos links */
.nav ul li a {
	float:left;
	height:22px;
	text-indent:-9999px;
	overflow:hidden;
	background-position:center center;
	background-repeat:no-repeat;
}

/* Adiciona o background e a largura nos elementos do menu */
.nav ul li.navlivros a {width:79px; background-image:url(imagem/_topo/abas/novo_livros.gif);}
.nav ul li.navdvd a {width:79px; background-image:url(imagem/_topo/abas/b_dvds2.gif);}
.nav ul li.navcd a {width:79px; background-image:url(imagem/_topo/abas/b_cds2.gif);}
.nav ul li.navgames a {width:79px; background-image:url(imagem/_topo/abas/b_games2.gif);}
.nav ul li.navsitesesp a {width:149px; background-image:url(imagem/_topo/abas/novo_sitesesp.gif);}
.nav ul li.naveventos a {width:109px; background-image:url(imagem/_topo/abas/novo_eventos.gif);}

/** Define que a UL do submenu está escondida por default. E define o visual do submenu */
.nav ul li ul {
	display:none;
	background:#00A2B0;
	width:70px;
	position:absolute; top:22px; left:0px;
	padding:4px;
}

/* Resetamos todo o estilo dos links do submenu. Isso poderia ser evitado se o IE7 conhecesse seletores complexos ou com JQuery */
.nav ul li ul li a {
	font:13px verdana, arial, tahoma, sans-serif;
	background-image:none !important;
	text-indent:0;
	float:none;
	color:white;
}

.nav ul li ul li a:hover {text-decoration:none;}

Veja o resultado do menu reconstruído aqui.

O Submenu na versão original, eu fiz utilizando apenas CSS. Testei em Firefox e IE7/8. Funciona que é uma beleza. Sem Javascript, sem JQuery, nem nada.
Se o IE7 já conhecesse seletores complexos, não precisaríamos resetar todos os links dos submenus como fizemos na linha 35.
O Código CSS, embora pareça longo, ele está organizado para ser fácil de adicionar outros elementos.

Sempre que escrever um CSS, pense sempre no futuro. Um CSS para resolver um problema imediato, normalmente tem menos código. Mas ele resolve apenas aquele problema específico. Se você fizer um CSS abrangente e pensando no futuro, seu código fatalmente vai ficar maior. Mas você terá menos retrabalho ao fazer as alterações futuras. Eu prefiro.

Pegue aqui os dois códigos para estudar: Reconstrução Menu Livraria Cultura

Por Diego Eis

Diego Eis criou o Tableless para disseminar os padrões web no Brasil. Como consultor já treinou equipes de empresas como Nokia, Globo.com, Yahoo! e iG. É palestrante e empreendedor.

http://twitter.com/diegoeis/

Veja os outros posts de

  • Paulo Andraus

    Eu nunca aprendi tabela.
    Vejo um código em tabela até me arrepia.
    Sou filho do CSS com XHtml, simplifica muito as coisas…

    Tomara que a livraria deixe (e até mude o próprio menu) o post no ar!

  • Leyrson

    Só senti falta do sprite mas legal, parabéns!!

  • James Clebio

    Muito bom! Seria interessante publicar um link de demonstração de como ficou depois de convertido. ;D

  • http://twitter.com/mvalho Marcelo Carvalho

    Muito bom! me lembro da época em que você fazia a conversão das homes… isso ajuda muito, quem ta aprendendo e quer aprimomarar os conhecimentos vendo algo na prática! parabéns

  • http://blogzeropoint.wordpress.com Guto

    já tentei fazer isso, mas eu sempre acho que os meus ficam sem nada de mais.

    uma sugestão pra mais um convertido: globo.com

  • http://www.twitter.com/mastrigiani Rodrigo Mastrigiani

    Muito bom Diego. Esses dias atrás estava quebrando a cabeça para resolver uma questão semelhante. :)

  • http://www.chrisb.com.br Chris Benseler

    O Diego postou o link, James. Está em http://tableless.com.br/convertidos/livraria-cultura/menu/correto/

    Parabéns pela volta dos “convertidos”, Diego, nesse mesmo formato (espero que as empresas não achem isso invasivo, pois como didática é uma bela forma).

    Abs!

  • http://rodrigofante.com Rodrigo Fante

    Bom, isso deveria ser o basico, mas para muita gente eh um bicho de 7 cabecas.

    Faltou apenas usar sprites ali, mas de resto muito bom.

  • James Clebio

    É, Chris, agora o Diego colocou o link. Ficou beleza! ;D

  • Dimas

    Muito bom, sempre entro aqui no seu site para continuar me atualizando. abs

  • Marcio Toledo

    Acho que o ponto mais importante desse tipo de menu é deixar bem explícito que partes do menu são expandíveis, como foi feito aqui… parece bobagem mas já vi muitos sites grandes que erram nisso (inclusive portais como o da CNN).

    Outra coisa, sem querer ser o chato da conversa, mas já sendo: O conteúdo do tableless já foi muito melhor, ultimamente não tenho visto nada de realmente interessante sendo postado.

  • http://twitter.com/pcassiano Paulo Cassiano

    Já tentou vender esta ideia – bem como um novo site – para eles?

  • http://www.twitter.com/Felipe_Volpatto Felipe Volpatto

    Bacana a explicação, mas sinceramente, não sou muito fã desse menu da livraria Cultura hehe.

    Já ia mes esquecendo, parabéns pela volta dos “convertidos”.

    Um abraço!

  • http://eulinonetto.com Eulino Netto

    Diego, ficou muito bom.

    Gostei desse primeiro convertido. Como o pessoal já disse, espero que ninguém se zangue e queira tirar do ar.

    No mais, tá blz.

  • http://flaviowd.wordpress.com Flávio Araújo

    Ficou show, pra ficar 100% agora so adicionar o “title”, apesar de usar a tecnica de Image-Replacement.

  • pedro ivo

    faltou o title e css sprite, mas legal, parabéns!!

  • Pingback: Tweets that mention Convertido – Menu (Livraria Cultura) | Boas práticas de Desenvolvimento com Padrões Web -- Topsy.com

  • http://www.tudopodre.com.br Psysapiens

    Boa Cabelo!
    Pra ficar melhor só faltou usar um CSS sprites, para diminuir o peso do site e aumentar a velocidade de carregamento!
    Link para a técnica: http://hype2.me/bjl3

    Aguardando ansioso o próximo “Convertidos”.

    XD

  • http://twitter.com/diegoeis/ Diego Eis

    Pessoal, a idéia do convertidos é utilizar as imagens, textos e etc do site deles. Se eu tivesse que criar outras imagens e etc para recriar o menu, perderíamos o foco. A idéia é: qual a alternativa mais correta de código, utilizando apenas o material encontrado no site deles.

    Se o camarada recortou as imagens, eu usarei as imagens que ele cortou, mesmo que isso utilize mais código ou seja mais dificil. O importante é provar que dá para fazer algo inteligente, mesmo quando o layout foi pensado para outro propósito.

  • http://www.theossi.com Felipe Theossi

    Parabéns Diego por mais um excelente post…

  • http://www.designando.com Marcelo Sales

    Até arrepiou, quando li o post: “A volta dos convertidos…”, juro que pensei que era bug do Reader ou algo assim… rs

    Lembro que vocês pararam de “converter” devido a um problema com um dos donos de um site que reclamou, blablabla… não lembro exatamente o site, mas lembro que era algo do tipo… a pergunta que fica é: E agora, você tá pedindo uma autorização ou corremos o risco de novamente “perder” os convertidos?!?… rsrs

    Abraços!

  • http://twitter.com/rafelcavalcante Rafael

    Esse povo não lê o artigo inteiro e quer comentar. Santa preguiça, né?

    Muito bom o artigo!!