X

Como criar um Menu Dropdown com apenas CSS

Como criar um Menu Dropdown com apenas CSS

Este tutorial ensina a como criar um menu Dropdown com apenas recursos do CSS 3. Veja abaixo o resultado final:

O menu que vamos criar é composto de 3 níveis, título principal, sub categoria e sub-sub categoria. Uma vez que passar o mouse por cima do título, automaticamente é disparado o evento :hover que mostrará as sub categorias. A primeira série de sub-links aparecem embaixo da barra principal de navegação, então a segunda série de links irá aparecer horizontalmente a partir do primeiro sub item. Dê uma olhada na imagem.

A Estrutura HTML

Primeiro vamos precisar criar nossa estrutura HTML. Vamos utilizar a tag <nav> do HTML 5, em seguida, adicionar os links de navegação primários em uma lista desordenada.

<nav>
 <ul>
  <li><a href="#">Home</a></li>
  <li><a href="#">Tutoriais</a>
   <ul>
    <li><a href="#">CSS</a></li>
    <li><a href="#">HTML</a></li>
    <li><a href="#">JavaScript</a>
     <ul>
      <li><a href="#">jQuery</a></li>
      <li><a href="#">Angular</a></li>
     </ul>
    </li>
   </ul>
  </li>
  <li><a href="#">Artigos</a>
   <ul>
    <li><a href="#">Node.js</a></li>
    <li><a href="#">MongoDB</a></li>
   </ul>
  </li>
  <li><a href="#">Crie seu Próprio Menu</a></li>
 </ul>
</nav>

O resultado sem a inserção do CSS ficaria da seguinte forma:

Estilizando com CSS

Vamos começar com o básico, primeiro vamos apenas esconder nossos sub-links e fazê-los aparecer caso passe o mouse por cima do menu pai. Para isto, vamos utilizar o seletor :hover que, quando passado o mouse sobre o menu, os seu elementos filhos serão mostrados. Com este pequeno código já temos um resultado interessante. Passe o mouse sobre os links para ver o resultado em ação. Também centralizamos o menu.

nav ul ul {
 display: none;
}

 nav ul li:hover> ul {
  display: block;
 }

nav {
 margin: 0 auto; 
 text-align: center;
}

Agora vamos dar uma melhorada no visual adicionando cor e espaçamentos.

nav ul {
 background: #efefef; 
 background: linear-gradient(top, #efefef 0%, #bbbbbb 100%);  
 background: -moz-linear-gradient(top, #efefef 0%, #bbbbbb 100%); 
 background: -webkit-linear-gradient(top, #efefef 0%,#bbbbbb 100%); 
 box-shadow: 0px 0px 9px rgba(0,0,0,0.15);
 padding: 0 20px;
 border-radius: 10px;  
 list-style: none;
 position: relative;
 display: inline-table;
}
 nav ul:after {
  content: ""; clear: both; display: block;
 }

Veja como está ficando até agora.

Continuando, agora vamos fazer o posicionamento dos menus, definir a cor para os sub-menus e dispor como espaços e blocos.

 nav ul li {
  float: left;
 }
  nav ul li:hover {
   background: #4b545f;
   background: linear-gradient(top, #4f5964 0%, #5f6975 40%);
   background: -moz-linear-gradient(top, #4f5964 0%, #5f6975 40%);
   background: -webkit-linear-gradient(top, #4f5964 0%,#5f6975 40%);
  }
   nav ul li:hover a {
    color: #fff;
   }
  
  nav ul li a {
   display: block; padding: 15px 20px;
   color: #757575; text-decoration: none;
  }

Neste ponto nosso menu começa a ficar interessante, ganhando um visual e funcionando de modo precário ainda. Agora, vamos adicionar os posicionamentos e cores. Veja que sub-menus agora ganham uma cor diferenciada e seus descendentes uma formatação para melhor apresentação.

 nav ul ul {
  background: #5f6975; border-radius: 0px; padding: 0;
  position: absolute; top: 100%;
 }
  nav ul ul li {
   float: none; 
   border-top: 1px solid #6b727c;
   border-bottom: 1px solid #575f6a; position: relative;
  }
   nav ul ul li a {
    padding: 15px 40px;
    color: #fff;
   } 
    nav ul ul li a:hover {
     background: #4b545f;
    }

A barra de navegação está quase completa, agora ela já está eslizada mas seus sub-menus ainda apresentam algum problema de posicionamento. Eles estão herdando configurações de seus pais, vamos mudar este comportamento para os sub-menus se posicionarem ao lado de seus elementos pai. Adicione mais este código:

 nav ul ul ul {
  position: absolute; left: 100%; top:0;
 }

Resultado:

No elemento final, adicionamos uns efeitos ao fundo, veja como ficou.

Dica: Utilizando o normalize.css, você obterá uma maior compatibilidade com browsers antigos.


This post was last modified on 2 de maio de 2018 10:36

Turbosite:

This website uses cookies.