Criando um menu retrátil com CSS e jQuery

Compartilhe este artigo!

Sobre o autor

Entre em contato...

Redação ForumWeb

Redação ForumWeb Equipe de desenvolvimento do ForumWeb.com.br, responsável pelas dicas e downloads do site.

Site do autor: http://www.forumweb.com.br

Indique este artigo

Para

Seu email

Mensagem

Fechar
Personalize sua mensagem

Código

Arquivos relacionados

  • Por enquanto, nenhum arquivo para download.

Criando um menu retrátil com CSS e jQuery

Quarta-Feira, 20 de Janeiro de 2010 às 09:54

Hoje vou ensinar como criar um menu usando listas (ol) e que tem o efeito de expandir/retrair feito com jQuery.

O efeito em sí é bem simples e fácil de ser modificado… O meu foi feito usando HTML puro e uma folha de estilos (CSS) pequena.

Código (X)HTML do menu

<ul id="menu">
	<li class="header">Menu</li>
	<li><a href="#" title="">Página inicial</a></li>
	<li><a href="#" title="">Notícias</a></li>
	<li class="parent"><a href="#" title="">Produtos</a>
		<ul class="sub-menu">
			<li><a href="#" title="">Camisetas</a></li>
			<li><a href="#" title="">Calças</a></li>
			<li><a href="#" title="">Livros</a></li>
		</ul>
	</li>
	<li><a href="#" title="">Quem somos nós</a></li>
	<li><a href="#" title="">Contato</a></li>
</ul>


Vejam que o sub-menu (que irá aparecer) fica dentro do <li> e fora do <a>.

Código CSS do menu

* {
	margin: 0px;
	padding: 0px;
}

body {
	font-family: Verdana, Arial, sans-serif;
	font-size: 11px;
	margin: 20px;
}

ul {
	list-style: none;
}

ul#menu {
	width: 170px;
	border: 1px solid silver;
	margin-top: 20px;
}

ul#menu li {
	color: black;
	line-height: 19px;
	background: #F4F4F4;
}

ul#menu li.header {
	background: #DFDFDF;
	font-weight: bolder;
	padding: 0px 3px;
	font-size: 12px;
}

ul#menu li a {
	color: black;
	text-decoration: none;
	display: block;
	padding: 0px 3px;
	outline: none;
}

ul#menu li.parent > a {
	background: transparent url('../img/down.gif') right center no-repeat;
}

ul#menu li.aberto > a {
	background: transparent url('../img/up.gif') right center no-repeat;
}

ul#menu li a:hover {
	background-color: #EAEEFF;
}

ul#menu li ul.sub-menu {
  	display: none;
}

ul#menu li ul.sub-menu li a {
	padding-left: 15px;
	color: maroon;
}


Bloco de código do efeito (jQuery)

$(function() {
	// Evento de clique do elemento: ul#menu li.parent > a
	$('ul#menu li.parent > a').click(function() {
		// Expande ou retrai o elemento ul.sub-menu dentro do elemento pai (ul#menu li.parent)
		$('ul.sub-menu', $(this).parent()).slideToggle('fast', function() {
			// Depois de expandir ou retrair, troca a classe 'aberto' do <a> clicado
			$(this).parent().toggleClass('aberto');
		});
		return false;
	});
});


É só juntar todas as peças (como foi feito no exemplo) e o seu menu irá funcionar que é uma maravilha!

O código do efeito pode parecer um pouco complicado pra quem tá começando com jQuery, mas é só ler os comentários e procurar um pouco sobre cada função (slideToggle, toggleClass, click) na documentação que, com os exemplos de lá vai ficar tudo claro.

Imagens usadas no artigo


( http://www.forumweb.com.br/autor/redacao/artigo_000052/down.gif )


( http://www.forumweb.com.br/autor/redacao/artigo_000052/up.gif )

Fonte: Thiago Belem

Qual a sua opinião?

Comente e interaja!



3 Comentários!

#1
Alexandre | Domingo, 20 de Fevereiro de 2011 às 19:36

sub-menu c/ mais niveis

ola pessoal... sou novo aqui.., gostariia de adapitar esse godigo colocando uma categoria dentro da subcategoria... pretendo mudar assim...: --2010 ---janeito ------18jan ------20jan ---fevereiro --2011 só que qundo clico em "2010" abre-se a sub categoria "janeiro" e ja fica aberta os dias tb... gostaria de quando eu clicasse em 2010 apenas abrisse as sub-categorias de 2010 e os dias so abrissem qundo eu clicasse no mes.. e outra coisa que eu gstaria de colocar.., é que quando se clicasse em 2011 se fechasse as subcategorias de 2010, ja fiz varias alterações e nao ta dando certo .Obrigado.
Denunciar
#2
fabio | Quarta-Feira, 12 de Janeiro de 2011 às 20:03

show de bola

dica muito util e funcional ... parabéns e espero ler outros artigos de sua autoria .. abçs
Denunciar
#3
Marcos | Sexta-Feira, 16 de Abril de 2010 às 01:03

muito bom

achei o tuto muito bom mesmo, espero que coloque outros da mesma qualidade.
Denunciar