In questo articolo vedremo come creare un menu dropdown con effetti dinamici senza l'ausilio di JavaScript. Aggiungeremo un marcatore per segnalare la presenza del sottomenu e lo modificheremo quando l'utente passa con il mouse sulla voce attiva. Il tutto con i soli CSS.
Partiamo dalla seguente struttura HTML:
<ul id="navigation">
  <li class="sub"><a href="#">Nav 1</a>
          <ul class="sub-navigation">
                <li><a href="#">SubNav 1</a></li>
                <li><a href="#">SubNav 2</a></li>
                <li><a href="#">SubNav 3</a></li>
          </ul>
  </li>
  <li><a href="#">Nav 2</a></li>
  <li><a href="#">Nav 3</a></li>
  <li><a href="#">Nav 4</a></li>
</ul>
Per prima cosa formattiamo il menu principale e il sottomenu:
#navigation {
    height: 2em;
    background: #333;
}
#navigation > li {
    float: left;
    height: 100%;
    margin-right: 0.5em;
    position: relative;
}
#navigation > li > a {
    float: left;
    height: 100%;
    line-height: 2;
    color: #ddd;
    text-decoration: none;
    padding: 0 1em;
}
#navigation > li > a:hover {
    background: #000;
    color: #fff;
}
#navigation ul.sub-navigation {
    width: 12em;
    background: #000;
    position: absolute;
    top: 2em;
    left: 0;
    display: none;
    z-index: 1000;
}
#navigation ul.sub-navigation li {
    display: block;
    margin-bottom: 0.4em;
}
#navigation ul.sub-navigation li:last-child {
    margin-bottom: 0;
}
#navigation ul.sub-navigation li a {
    display: block;
    padding: 0.4em 0.5em;
    color: #fff;
    text-decoration: none;
}
#navigation ul.sub-navigation li a:hover {
    background: #333;
    color: #ddd;
}
Il sottomenu è inizialmente nascosto. Per mostrarlo al passaggio del mouse aggiungiamo il seguente codice:
#navigation > li.sub:hover ul.sub-navigation {
    display: block;
}
Quindi usiamo il contenuto generato per creare il marcatore da aggiungere alla voce con il sottomenu:
#navigation > li.sub > a:after {
    content: '+';
    display: inline-block;
    width: 20px;
    height: 20px;
    line-height: 20px;
    text-align: center;
    background: #000;
    color: #fff;
    border-radius: 50%;
    margin-left: 5px;
}
In pratica abbiamo creato un icona con un segno più. Ora cambiamo il segno più in meno quando l'utente apre il sottomenu:
#navigation > li.sub:hover > a:after {
    content: '-';
    display: inline-block;
    width: 20px;
    height: 20px;
    line-height: 20px;
    text-align: center;
    background: #000;
    color: #fff;
    border-radius: 50%;
    margin-left: 5px;
}
Potete visionare l'esempio finale in questa pagina.