Pular para o conteúdo principal

Como Criar um Menu Horizontal com Sub Menu Utilizando CSS3

menu-com-dropdown

Como Criar um Menu com Sub-menu?

No princípio das minhas peripécias com front-end, eu tive bastante dificuldade para criar até mesmo um simples menu horizontal com CSS seguindo nossos amados tutoriais nas "interwebs" da vida. Criar um menu com Drop-down então, com o que eu sabia, era impensável! Antes de estudar bem o CSS, eu nem imaginava a capacidade que ele tinha. Se você não sabe o que é drop-down:

Drop-down em tradução livre e literal significa suspenso. Mas no caso de um menu com função drop-down, é um menu com um sub-menu acoplado para determinados items, que se revela ao passar o mouse ou clicar nesses mesmo itens.

Quebrei muito a cabeça com tutoriais e códigos prontos e não conseguia entender a lógica do sistema e sem entender essa lógica não era possível adaptá-lo para meus fins e acabava por utilizar outras saídas que até resolviam o problema, porém davam muito trabalho para pouco resultado.

Utilizando Javascript

A solução que acabei encontrando foi utilizar o JavaScript , e como também sabia muito pouco a respeito também resolvi complementar a solução utilizando uma biblioteca que hoje conhecemos como frameworks, no meu caso escolhi o jQuery (que até hoje é meu preferido), pra resolver esse meu problema.

Eis minha antiga estrutura para o menu, uma lista não ordenada com um item com a classe menu e uma sub-lista com a classe sub-menu:
<ul class="menu">
 <li><a href="#">Home</a></li>
 <li class="menu"><a href="#">Assuntos</a>
  <ul class="sub-menu">
   <li><a href="#">Livros</a></li>
   <li><a href="#">Filmes</a></li>
  </ul>
 </li>
 <li><a href="#">Sobre</a></li>
</ul>
Abaixo uma formatação básica para dispor os elementos do menu na horizontal e retirar o estilo de lista (aqueles pontos antes de cada item).
li{
 list-style:none;
 float:left;
}
.sub-menu{
 position:absolute;
 display:block;
 float:none;
}
Por fim ainda faltava o JavaScript para realizar os efeitos.
$(".sub-menu").hide();  //Esconde o submenu
// Função (.hover) que permite fazer algo ao passar o mouse sobre a classe .menu
$(".menu").hover(function(){
  $(".sub-menu").show();  // Revela o submenu
,function(){  // Ao tirar o mouse do elemento
  $(".sub-menu").hide()  // Esconde novamente o menu
})

Utilizando Puro CSS

Mais tarde encontrei a solução no blog do já famoso na internet maujor.com com as chamadas Pseudo Classes CSS que são usadas para interpretar certas condições. Assim podemos adicionar efeitos desencadeados por essas condições. Para nossos fins, temos a Pseudo Classe :hover que serve justamente para aplicar propriedades CSS a um elemento que tenha o mouse passado sobre ele!

Deixando assim completamente desnecessário o código JavaScript citado acima, já que ele o próprio CSS dá conta sozinho de revelar o menu ao passar o mouse. Com a chegada do CSS3 a utilização do JavaScript tem caído ainda mais em desuso para esses determinados fins, já que a linguagem ganha INFINITAS POSSIBILIDADES com as várias novas regras. Em breve vou escrever um artigo mais detalhado sobre o assunto.

Sendo bem claro, no nosso caso vamos resolver o problema aplicando uma regra para esconder o Sub-menu e para fazê-lo aparecer novamente, usamo a já citada Pseudo Classe :hover, segue abaixo o novo código:

/* Novo HTML mais limpo */
<ul class="menu">
 <li><a href="#">Home</a></li>
 <li class="has-submenu"><a href="#">Assuntos</a>
  <ul>
   <li><a href="#">Livros</a></li>
   <li><a href="#">Filmes</a></li>
  </ul>
 </li>
 <li><a href="#">Sobre</a></li>
</ul>
*{margin:0;padding:0;} /* Tiny Reset */
ul.menu li{
 display:inline-block;
}
li.has-submenu ul{
 display:none;
 position:absolute;
}
li.has-submenu ul li{
 display:flex;
}
li.has-submenu:hover ul{
 display:block;
}

/* Visual */
ul.menu{
 margin:2rem;
 display:flex;
}
ul.menu li a{
 text-decoration:none;
 background: #fff;
 border:1px solid #ddd;
 padding:1rem 2rem;
 margin-right:-1px;
 color:#333;
}
li.has-submenu ul{
 margin-top:.95rem;
}
ul.menu li a:hover{
 background:#eee;
}
li.has-submenu ul li a{
 min-width:100px;
}
li.has-submenu ul li{
 margin-bottom:-1px;
}
ul.menu li.has-menu{
 top:0;
}

Explicando o código

A primeira regra seleciona todos os elementos ( * ) e retira todos os espaçamentos e margens ( margin:0; padding:0; ), para podermos configurá-los manualmente.

A segunda regra seleciona todos os itens da lista com a classe menu ( ul.menu li ) e manda o interpretador exibí-los em linha de blocos.

A terceira regra seleciona qualquer lista que estiver dentro de um item com a classe has-submenu ( li.has-submenu ul ) e manda o interpretador não mostra-lás, define sua posição como absoluta pra não empurrar outros elementos.

A útima regra é quem faz a mágica de mostrar o sub-menu ao massar o mouse sobre o item da classe menu a qual ele pertence ( li.has-submenu:hover ul ).

O restante do código apenas altera a aparência do menu.

Qualquer dúvida, crítica ou sugestão deixe um comentário.

/fa-clock-o/ WEEK TRENDING$type=list

Integração contínua com ReactJS: Como automatizar seu fluxo de trabalho

Integração contínua com ReactJS: Como automatizar seu fluxo de trabalho A integração contínua (CI, do inglês "Continuous Integration") é uma técnica que tem como objetivo automatizar o processo de build e teste de um software, permitindo que as equipes de desenvolvimento possam entregar novas funcionalidades com mais rapidez e qualidade. Neste artigo, vamos explorar como aplicar a CI no desenvolvimento de aplicações web com ReactJS, e como automatizar todo o fluxo de trabalho utilizando ferramentas populares como o GitLab CI e o Travis CI.   Confira o blog DougDesign para e veja como conseguir seu primeiro emprego na área de proramação e tecnologia.   O que é Integração Contínua? A integração contínua é uma prática de desenvolvimento de software que visa automatizar o processo de build e teste de um aplicativo. Com a CI, cada vez que um desenvolvedor envia código para o repositório de controle de versão, o sistema automaticamente executa uma série de tarefas, incluindo a comp...

Como integrar o ChatGPT em seu whatsapp

Como integrar o ChatGPT em seu whatsapp O ChatGPT é uma ferramenta poderosa para chatbots baseados em linguagem natural. Integrá-lo com o WhatsApp pode ajudá-lo a fornecer uma experiência de atendimento ao cliente ainda melhor para seus usuários. Passo 1: Criar um número de telefone do WhatsApp Business Para integrar o ChatGPT com o WhatsApp, você precisará criar uma conta do WhatsApp Business. Se você já possui uma conta do WhatsApp Business, pode pular para o próximo passo. Para criar uma conta do WhatsApp Business, faça o seguinte: Baixe o aplicativo WhatsApp Business na Google Play Store ou na App Store. Siga as instruções na tela para criar uma conta. Verifique seu número de telefone comercial. Passo 2: Configurar o Twilio Sandbox para WhatsApp O Twilio é um serviço de mensagens que permite enviar e receber mensagens do WhatsApp. O Twilio Sandbox é um ambiente seguro onde você pode testar o envio e recebimento de mensagens do WhatsApp sem precisar de um número de telefo...