Categories: CSStodasWeb Design

Menumania #1

Dispositivo de navegação tal como menu vertical ou barra de navegação horizontal é sem dúvida um componente de uma página Web que tem merecido grande atenção de desenvolvedores e designers e as possibilidades de construção e implementação destes dispositivos cobrem uma faixa que vai desde um agrupamento simples de links com seu comportamento padrão até sofisticados e interativos menus e barras.  

As CSS nada ficam a dever às demais técnicas de desenvolvimento e possibilitam grande flexibilidade na construção de menus e barras de navegação. O elemento HTML apropriado para a marcação é o elemento lista em suas três versões UL, OL e DL e a escolha de um deles é uma questão de avaliação das condições particulares a cada caso. Contudo não há exagero em afirmar que na grande maioria dos casos a escolha recai sobre o elemento UL.

Neste tutorial mostrarei o emprego das CSS para construir três tipos distintos de menu vertical e sua equivalente barra de navegação horizontal abordando os fundamentos da técnica, que se bem entendida possibilitará a construção de uma variedade sem limites de menus e barras.

Considerações gerais

Vamos combinar que para todas as variantes do menu, usaremos uma só marcação HTML, que é a mostrada a seguir.
Assim, não repetirei para cada caso a marcação HTML, mostrando apenas as regras CSS.
Todos os menus estão ativos no seu comportamento, isto é, não são imagens. Confira cada um deles, passando o mouse sobre os links.


<ul id="nav">
<li><a href="#">Link um</a></li>
<li><a href="#">Link dois</a></li>
<li><a href="#">Link tres</a></li>
<li><a href="#">Link quatro</a></li>
<li><a href="#">Link cinco</a></li>
</ul>

Exemplo 1

Navegação horizontal


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 font: 12px Arial, Helvetica, sans-serif;
 list-style-type: none;
 }
#nav li {
 float: left;
 }
#nav li a, #nav li a:link {
 background: #333; 
 border-right: 1px solid #f90;
 color: #f90;
 text-decoration: none;
 padding: 3px 8px 6px 8px;
 display: block;
 }
#nav li a:hover {
 color: #000;
 padding: 3px 8px 3px 8px;
 border-bottom: 3px solid #f90;
 background: #ccc;
 }
 

Navegação vertical


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 width: 100px;
 font: 12px Arial, Helvetica, sans-serif;
 list-style-type: none;
 border-left: 8px solid #f90; 
 background: #f90;
 }
* html #nav li {
 float: left;
 height: 1%;
 }
* html #nav li a { height: 1%; }

#nav li a, #nav li a:link {
 background: #333; 
 color: #f90;
 text-decoration: none; 
 margin-bottom: 1px;
 padding: 3px 0 6px 12px;
 display: block;
 }
#nav li a:hover {
 color: #000;
 padding: 6px 0 0 12px;
 border-bottom: 3px solid #f90;
 background: #ccc;
 }
 

Exemplo 2

Navegação horizontal


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 width: 100%;
 font:   bold 12px Geneva, Arial, Helvetica, sans-serif;
 list-style-type: none;
 }
#nav li {
 float: left;
 }
#nav li a, #nav li a:link {
 background: #ddd;
 border-width: 1px;
 border-color: #ffe #aaab9c #ccc #fff;
 border-style: solid;
 color: #000;
 text-decoration: none;
 padding: 3px 12px;
 display: block;
 }
#nav li a:hover {
 color: #666;
 border-color: #aaab9c #fff #fff #ccc;
 background: #eee;
 }
 

Navegação vertical


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 width: 100px;
 font: bold 12px Geneva, Arial, Helvetica, sans-serif;
 list-style-type: none;
 }
* html #nav li {
 float: left;
 height: 1%;
 }
* html #nav li a { height: 1%; }

#nav li a, #nav li a:link {
 background: #ddd;
 border-width: 1px;
 border-color: #ffe #aaab9c #ccc #fff;
 border-style: solid;
 color: #000;
 text-decoration: none;
 padding: 3px 12px;
 display: block;
 }
#nav li a:hover {
 color: #666;
 border-color: #aaab9c #fff #fff #ccc;
 background: #eee;
 }
 

Exemplo 3

Navegação horizontal


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 font: 12px Geneva, Arial, Helvetica, sans-serif;
 list-style-type: none;
 }
#nav li {
 float: left;
 }
#nav li a, #nav li a:link {
 display: block;
 margin-right:6px;
 padding: 3px 12px;
 border-left: 6px solid #1958b7;
 border-right: 6px solid #508fc4;;
 background-color: #2175bc;
 color: #fff;
 text-decoration: none;
 }
#nav li a:hover {
 border-left: 6px solid #1c64d1;
 border-right: 6px solid #5ba3e0;
 background-color: #2586d7;
 color: #fff;
 }
 

Navegação vertical


CSS
#nav, #nav * { 
 margin:0;
 padding:0;
 }
#nav {
 width: 170px;
 font: 14px Geneva, Arial, Helvetica, sans-serif;
 list-style-type: none;
 background:#ffe;
 }
* html #nav li {
 float: left;
 height: 1%;
 }
* html #nav li a { height: 1%; }
#nav li a, #nav li a:link {
 display: block;
 padding: 5px;
 margin-bottom: 1px;
 border-left: 10px solid #1958b7;
 border-right: 10px solid #508fc4;
 background-color: #2175bc;
 color: #fff;
 text-decoration: none;
 }
#nav li a:hover {
 border-left: 10px solid #1c64d1;
 border-right: 10px solid #5ba3e0;
 background-color: #2586d7;
 color: #fff;
 }
 

Nota final

O hack estrela (* html #nav li e * html #nav li a) para o Internet Explorer, usado nas folhas de estilo para o menu vertical, preferivelmente deverá ser servido via Comentários Condicionais.

Maujor

Exerci o magistério paralelamente a minha carreira profissional por toda uma vida e ao longo destes trinta anos aprendi tanto quanto ensinei. Sou um apaixonado por Web Standards e desenvolvo o site de tutoriais CSS para Web Design.

View Comments

  • Olá quero fazer isso no rodapé, como que eu faço pra ter 3menus verticais um do lado do outro?

  • A mesma pergunta da Cyntia, Fox e Luiz... rsrsrs

    Como faço para na navegação horizontal, abrir submenus na vertical,quando este é clicado? Tipo o menu feito no FW só que feito com css?

    Fico muito grato pela ajuda.
    Se puder, responda pelo e-mail

    Att, Danilo

  • Caro amigo,

    gostei muito do seu post. Eu gostaria de saber como fazer um subitem no menu horizontal (mas não é o drop down, seria um nível abaixo, como se foss uma aba)

    Você me dá uma luz?

    Ah, já comprei seu livro, mas ainda não chegou. Iniciativa massa! Deus o abençoe nessa empreitada.

  • A mesma pergunta da Cyntia e do Fox:
    Como faço para na navegação horizontal, abrir submenus na vertical,quando este é clicado? Tipo o menu feito no FW só que feito com css?

    Fico muito grato pela ajuda.
    Se puder, responda pelo e-mail.
    Att. Luiz.

  • A mesma pergunta da Cyntia.
    Como faço para na navegação horizontal, abrir submenus na vertical,quando este é clicado? Tipo o menu feito no FW só que feito com css?

    Obrigado.

  • Olá. Como faço para na navegação horizontal, abrir submenus na vertical,quando este é clicado? Tipo o menu feito no FW só que feito com css?
    Obrigada,
    Cyntia

  • Olá Mauricio, tudo bem?

    Ficou excelente estas explicações sobre os menus....
    Gostaria de saber como podemos inserir um menu drop down em um menu vertical...
    Em seu web site tem apenas para o horizontal, tentei de diversas forma e não consegui... poderia dar este help ?

    Abraço e parabens pelo seu blog e website...

  • Oi, tudo bem?:
    Bem aprendi fazer menu vertical no seu site e é muito bom saber que vc divide seu conhecimentoxom outras pessoas, pois foi muiiiito útel para mim
    Coloquei um link seu no meu blog espero que não se importe, para que mais pessoas possasm ser ajudadas ok.
    Obrigada.

  • Ótimo post.
    Além de reforçar os conceitos CSS, você mostrou o que eu acho mais importante - e interessante -, no CSS: a possibilidade de modificar a apresentação sem modificar a estrutura.

    Obrigado.

Share
Published by
Maujor

Recent Posts

Teste seu conhecimento #20

Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…

7 anos ago

Teste seu conhecimento #19

Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…

9 anos ago

JavaScript bubbling e capturing

Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…

10 anos ago

HTML5 – W3C versus WHATWG

HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…

10 anos ago

Seria esse o futuro das imagens responsivas?

Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…

10 anos ago

BrazilJS Conf 2013

Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…

11 anos ago