Menu
Coddy logo textTech

Menu dropdown

Parte da seção Practical Frontend do Journey de HTML da Coddy — lição 20 de 35.

Um menu suspenso (dropdown) é um item de navegação que mostra mais links quando o usuário passa o mouse ou foca nele. Embora os dropdowns possam ser construídos usando JavaScript, neste capítulo focamos em uma abordagem apenas com CSS, que utiliza :hover ou :focus-within para revelar o menu oculto.

Por que usá-los:

  • Economiza espaço em barras de navegação.
  • Mantém a interface limpa e organizada.
  • Funciona bem para designs mobile-first e responsivos quando adaptado adequadamente.

HTML:

<div class="dropdown">
  <button class="dropdown-button">Menu</button>
  <div class="dropdown-content">
    <a href="#">Option 1</a>
    <a href="#">Option 2</a>
    <a href="#">Option 3</a>
  </div>
</div>

CSS: 

//O .dropdown é position: relative 
//para que o conteúdo do dropdown possa ser posicionado corretamente com position: absolute.
.dropdown {
  position: relative;
  display: inline-block;
}
//O .dropdown-content é ocultado por padrão usando display: none.
.dropdown-content {
  display: none;
  position: absolute;
}
//Quando o usuário passa o mouse sobre o contêiner .dropdown, 
//o .dropdown-content é exibido usando display: block.
.dropdown:hover .dropdown-content {
  display: block;
}

Com este código, ao passar o mouse sobre o contêiner do dropdown (incluindo o botão), o conteúdo do dropdown aparecerá.

challenge icon

Desafio

Fácil

Você recebeu o HTML para um menu suspenso com um botão rotulado "Select Color" e três opções: Red, Green, Blue.

Sua tarefa é estilizar o menu suspenso com CSS para que:

  1. As opções fiquem ocultas por padrão.
  2. As opções se tornem visíveis quando o usuário passar o mouse sobre o contêiner do menu suspenso.

Folha de consulta

Um menu suspenso mostra mais links quando o usuário passa o mouse ou foca nele. Use :hover ou :focus-within para revelar o menu oculto.

Estrutura HTML:

<div class="dropdown">
  <button class="dropdown-button">Menu</button>
  <div class="dropdown-content">
    <a href="#">Option 1</a>
    <a href="#">Option 2</a>
    <a href="#">Option 3</a>
  </div>
</div>

Implementação CSS:

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
}

.dropdown:hover .dropdown-content {
  display: block;
}

O contêiner do dropdown usa position: relative para que o conteúdo do dropdown possa ser posicionado com position: absolute. O conteúdo é ocultado por padrão com display: none e exibido ao passar o mouse com display: block.

Experimente você mesmo

<!DOCTYPE html>
<html>
<head>
  <title>Dropdown menu</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      padding: 50px;
      background-color: #f0f0f0;
    }

    .dropdown {
      position: relative;
      display: inline-block;
    }

    .dropdown-button {
      padding: 10px 20px;
      font-size: 16px;
      cursor: pointer;
      border: 1px solid #333;
      border-radius: 5px;
      background-color: #ffffff;
    }

    .dropdown-content {
      position: absolute;
      top: 100%;
      left: 0;
      background-color: #ffffff;
      min-width: 160px;
      border: 1px solid #ccc;
      border-radius: 5px;
      box-shadow: 0 2px 5px rgba(0,0,0,0.2);
      z-index: 1;
    }

    .dropdown-content a {
      display: block;
      padding: 10px;
      text-decoration: none;
      color: #333;
    }

    .dropdown-content a:hover {
      background-color: #f2f2f2;
    }

    /* Show dropdown on hover or focus */
    .dropdown:hover .dropdown-content,
    .dropdown:focus-within .dropdown-content {

    }
  </style>
</head>
<body>

  <div class="dropdown">
    <button class="dropdown-button">Select Color</button>
    <div class="dropdown-content">
      <a href="#">Red</a>
      <a href="#">Green</a>
      <a href="#">Blue</a>
    </div>
  </div>

</body>
</html>
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Practical Frontend