Um menu do tipo dropdown possui a particularidade de exibir os subitens no momento em que você posiciona o mouse sobre o item pai. São amplamente explorados para melhor dividir e organizar as informações de navegação de um site, além de trazer um bom apelo visual para o visitante. O fator interatividade do menu também é outro ponto positivo, já que ao ocultar itens provoca a curiosidade do internauta para descobrir o conteúdo escondido.

ADICIONE O SUPORTE A MENUS

Caso o tema que esteja utilizando não tenha suporte à menus, abra o arquivo functions.php e adicione as seguintes instruções:

register_nav_menu( 'main-menu', 'Menu Principal' );

Nesse passo registramos o menu com identificador main-menu e nome Menu Principal através dos parâmetros passados. A seguir escolheremos o local do tema que desejamos exibir esse menu. Normalmente os menus localizam-se no topo das páginas, caso queira dessa forma também, abra o arquivo header.php e insira onde melhor se adequar o menu ao template:

<div id="menu">
    <?php wp_nav_menu( array( 'location'=>'main-menu', 'container'=>'div', 'container-class'=>'menu', 'menu_class'=>'ul-menu' ) ); ?>
</div>

Na função wp_nav_menu identificamos o menu criado para ser exibido no referido espaço e os parâmetros de container fazem o menu ser envolvido por uma div (tag HTML) com a classe ‘menu’, enquanto que a classe da lista não-ordenada do menu foi definida para diferenciar da classe da div.

EXIBINDO MENUS

Após ter inserido os códigos nos arquivos do tema, abra-o e veja os valores retornados e o menu gerado pela função. Se você seguiu os passos e não possui menus criados no WordPress o resultado será a listagem das páginas, isso porquê a função wp_nav_menu executa a função wp_page_menu por padrão se nenhum menu for encontrado.

Essa é a razão de colocarmos o menu dentro da div com classe menu, pois também por default, a função alternativa gera uma div instanciada com a classe de mesmo nome. Dessa maneira o menu será exibido da mesma forma independente de ter sido criado ou não e possuirá a marcação semelhante a essa:

<div id="menu">
	<div class="menu">
		<ul>
			<li id="item-1" class="page_item page-item-1">
				<a href="http://localhost/wordpress/?page_id=1" title="Item 1">Item 1</a>
			</li>
			<li id="item-2" class="page_item page-item-2">
				<a href="http://localhost/wordpress/?page_id=2" title="Item 2">Item 2</a>
			</li>
			<li id="item-3" class="page_item page-item-3">
				<a href="http://localhost/wordpress/?page_id=3" title="Item 3">Item 3</a>
			</li>
			<li id="item-4" class="page_item page-item-4">
				<a href="http://localhost/wordpress/?page_id=4" title="Item 4">Item 4</a>
				<ul class='children'>
					<li id="item-5" class="page_item page-item-5">
						<a href="http://localhost/wordpress/?page_id=5" title="Item 5">Item 5</a>
					</li>
					<li id="item-6" class="page_item page-item-6">
						<a href="http://localhost/wordpress/?page_id=6" title="Item 6">Item 6</a>
					</li>
				</ul>
			</li>
		</ul>
	</div>
</div>

GERENCIANDO MENUS PELO WORDPRESS

Abra seu painel administrativo e clique em Aparência, e em seguida no item Menus localizado no menu lateral. Nessa tela de edição de menus adicione os itens das caixas auxiliares e arraste-os como bem entender de modo a compor o melhor menu que adeque ao seu site. Posicione determinado item embaixo de outro e arraste-o para frente para definí-lo como filho do item acima localizado.

No caso da listagem alternativa de páginas para o caso de não existir menu criado, você pode definir uma página como filha de outra na tela de edição de páginas. Localize a caixa Atributos de página, normalmente à direita da caixa de edição de texto e escolha uma outra página qualquer no campo Mãe.

ESTILIZE SEU MENU COM CSS

Iremos agora formatar o modo como o menu será exibido dentro do template. Para isso inclua em seu arquivo style.css as seguintes linhas:

#menu { float: left; width: 100%; height: 50px; }
#menu li { float: left; padding: 10px 20px; }

#menu li ul { display: none; position: absolute; }
#menu li ul li { display: block; float: none; padding: 5px 10px; }

Além dessas marcações você pode explorar o visual do modo que tenha uma melhor apresentação ao seu visitante, as informação passadas são a base para o funcionamento do efeito dropdown. Note que obedecemos a estrutura para ambas as funções e definimos de modo prático que:

  • width: 100% – O menu ocupará a tela toda;
  • float: left – Os itens primários exibidos lado a lado;
  • display: none – Os subitens não serão exibidos inicialmente;
  • display: block; float: none – Os subitens quando mostrados estarão um abaixo do outro;

INTERACÇÃO COM JAVASCRIPT

Usaremos a biblioteca jQuery para fazer aparecer e tornar a ocultar os subitens de acordo com a interação do usuário. Incorpore o seguinte código javascript a sua página header.php, dentro da metatag :

<?php wp_enqueue_script( 'jquery' ); ?>
<script type="text/javascript">
jQuery(document).ready(function($)
{
	$("#menu ul li").each(function() {

		var el = $('#' + $(this).attr('id') + ' ul:eq(0)'); 

		$(this).hover(function() {
			var n_left = $(this).position().left;
			var n_top = $(this).position().top + 50;
			var n_width = $(this).width() + 40;

			el.css('left', n_left);
			el.css('top', n_top);
			el.css('width', n_width);
			el.show();
		}, function(){
			el.hide();
		});
	});
});
</script>

O valor 50 diz respeito a altura do menu, enquanto que 40 é o valor do padding (margem interna) que criamos. Em poucas palavras esse código irá:

  • Alternar a exibição dos subitens;
  • Posicionar o submenu abaixo do item que estiver com o mouse parado;
  • Igualar a largura do submenu com a do item ao qual pertence.

EXPLORANDO OS SUB-NÍVEIS DO MENU

Ao aplicar a programação encontramos um pequeno problema: Ela funciona bem apenas para o primeiro nível do menu. Por exibir os subitens abaixo do item selecionado, quando vamos além do primeiro nível os itens se sobrepõe uns aos outros. A alternativa para esse caso é criar uma variação que leva o submenu a frente do item atual:

<?php wp_enqueue_script( 'jquery' ); ?>
<script type="text/javascript">
var level = 0;
jQuery(document).ready(function($)
{
	$("#menu ul li").each(function()
	{
		var el = $('#' + $(this).attr('id') + ' ul:eq(0)'); 

		$(this).hover(function()
		{
			var n_left = $(this).position().left;
			var n_top = $(this).position().top + 50;
			var n_width = $(this).width() + 40;

			if ( level > 0 ) {
				n_top -= 50;
				n_left += n_width;
			}

			el.css('left', n_left);
			el.css('top', n_top);
			el.css('width', n_width);
			el.show();

			level++;
		}, function(){
			el.hide();
			level--;
		});
	});
});
</script>

Abraços!

Autor: Mazetto

Blog do Autor | Artigos do Autor:

Desenvolvedor web especializado em WordPress. Trabalha como freelancer de diversas agências do Brasil na criação de plugins, templates e consultoria à ferramenta.

Templates Wordpress que Recomendamos:

  • U-Design WordPress Theme
  • Tersus - Responsive WordPress Theme
  • Modernize - Flexibility of Wordpress
  • Good Space - Responsive Minimal WP Theme
  • Sterling - Responsive Wordpress Theme
  • Karma - Clean and Modern Wordpress Theme
  • Doover Premium WordPress Theme
  • MayaShop - A Flexible Responsive e-Commerce Theme
  • SmartStart WP - Responsive HTML5 Theme
  • Striking Premium Corporate & Portfolio WP Theme
  • Core Minimalist Photography Portfolio
  • King Size - fullscreen background WordPress theme

Gostou deste artigo? Então torne-se fã do Blog no Facebook!


Theme Forest

Comentários dos Alunos


  1. Gustavo Marttos
    14.04.2011

    Artigo muito bem feito Mazetto, este menu dropdown é muito parecido com o Smooth Navigation Dropdown.

    Parabéns.

    Responder


  2. Jt
    14.04.2011

    Parabéns pelo primeiro post Mazetto :)
    Ficou bastante bom e simples.
    Deu bastante jeito para um iniciante como eu.

    Responder


  3. Helder Tobias
    14.04.2011

    Mazzeto, parabens cara!
    Será que vc tem um link com esse menu em funcionamento pra gente ver?

    Responder


    • Mazetto
      15.04.2011

      Obrigado pessoal, sobre a referência do menu Helder, eu o desenvolvi e o utilizo em meu blog sobre WordPress ;D

      Responder


  4. Maycon Mazzo
    15.04.2011

    Ótimo, já utilizo no meu, porém com pequenas alterações…

    Responder


  5. Laurentino Mello
    23.04.2011

    Mazetto, é possível postar como realizar o procedimento com as categorias do blog?

    Abraços!

    Responder


    • Mazetto
      27.04.2011

      Olá Laurentino, enquanto edita seu menu, clique sobre o botão opções de tela na parte superior de sua tela e marque a opção categorias. Basta inserir as categorias que deseja no menu e seguir os passos acima. Abraço.

      Responder


  6. glima
    06.05.2011

    confuso..

    Responder


    • Mazetto
      16.06.2011

      Deixe sua dúvida, quem sabe não só eu, como todos aqui possam lhe ajudar…

      Responder


  7. Eduardo
    10.05.2011

    Olá Mazetto.
    Estou com um problema e recorro a você.
    Não consigo usar JQuery no meu blog!!!
    Já tentei de tudo, tenho a versão 3.1.1, uso as tags pra chamar mas não funciona.
    Porque você acredita que isso aconteça??

    Responder


    • Mazetto
      16.06.2011

      Tente carregar a jQuery de uma fonte externa como por exemplo <script type=”text/javascript” src=”http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js”></script>

      Responder


  8. Diego Henrique
    24.05.2011

    Olá, não estou conseguindo clicar nos submenus, eu coloco o mouse acima do “menu-pai” e aparece os sub menus, mas é só retirar o mouse de cima que eles somem, não há como clicar. :S Poderia me auxiliar?

    Responder


    • Mazetto
      16.06.2011

      Olá Diego, os itens não sumirão se ao retirar o mouse do menu pai for diretamenta para os filhos. Uma idéia é usar outras técnicas para o desenvolvimento do menu dropdown, como empregar apenas css – sem javascript – para tal.

      Responder


  9. johnatan
    10.10.2011

    Pow, me ajudou bastante, por sinal bem mais prático… o problema é com relação a criação sub-sub-sub-sub…………..sub-niveis?

    Como proceder o mesmo código a essa dinâmica?

    Responder


  10. Mazetto
    11.10.2011

    Olá Johnatan, nesses casos de múltiplos subníveis, seguindo o modelo, você teria que manipular as posições de left e top de acordo com a quantidade de níveis desejadas. Verifique o valor da variável level para isso. Abraços.

    Responder


  11. Daniel
    08.03.2012

    Mazetto, não entendi onde vai o último script postado. Em qual pagina php ele entra? valeu

    Responder


  12. mauricio
    29.03.2012

    o meu desejo é inserir imagens no menu horizontal wordpress, ja tenho um relativo conhecimento sobre html e css, mas se possivel gostaria de algumas instruçoes. nao quero usar imagens e texto, mas substituir totalmente o texto por imagens especificas

    Responder

Comente o Artigo!

RSS
Twitter
Facebook
Comentários
ASSINANTES
SEGUIDORES
FÃS
COMENTÁRIOS
11485

Subscrever Newsletter
Subscreva a Newsletter:


Elegant Themes

Wix

Theme Forest

Mojo Themes



Assine a Escola Wordpress Assine a Newsletter da Escola Wordpress Escola Wordpress no Twitter Escola Wordpress no Facebook Escola Wordpress no Youtube Escola Wordpress no Google Buzz