Menu a tendina e problemi di z-index

Scritto da Microcipcip il 26/08/2011, 1. Categoria: Web Design

Vi è mai capitato di "impazzire" durante la creazione di un menù a tendina perchè esso viene regolarmente "coperto" dagli altri elementi della pagina? A me sì, ed anche tante, tantissime volte!

In questo articolo vedremo quando si verifica questo problema, e soprattutto, vedremo come si risolve.

1. Il problema

Dunque, il problema si verifica quando alcuni elementi della pagina hanno posizionamento relativo mentre il menu a tendina ha il posizionamento assoluto. Ecco il codice di un tipico menu a tendina (la parte che importa a noi è il posizionamento assoluto, vedi linea 4):

/*  Menu Dropdown  */
#menu ul li ul {
    display: none;
    position: absolute;
    top: 49px;
    left: 0;
    padding: 0;
    margin: 0;
    width: 200px;     
    border-bottom: 4px solid #f66a1d;
}

Ed ecco uno screenshot dell'errore:

2. La soluzione

La soluzione al problema è la seguente: bisogna assegnare il posizionamento relativo ed il z-index all'elemento che si trova gerarchicamente ad un livello superiore di quello del menu a tendina. Attenzione: non bisogna assegnare il z-index direttamente al menu a tendina, bensì, lo ribadisco, all'elemento gerarchicamente superiore.

Vediamo di chiarire meglio il concetto con un esempio, supponiamo di avere questo html:

<!-- [Header] -->    
<div id="header">
    <div id="header-wrapper">

        <div id="menu">
            <ul>
                <li class="active"><a href="index.htm">Home</a></li>
                <li class="drop"><a href="primi.htm">Primi</a>
                    <ul>
                        <li><a href="index.htm">Home</a></li>
                        <li><a href="primi.htm">Primi</a></li>    
                        <li><a href="#">Secondi</a></li>
                        <li><a href="#">Antipasti</a></li>    
                        <li><a href="#">Dessert</a></li>    
                        <li><a href="#">Bevande</a></li>
                        <li><a href="#">Vegetariane</a></li>
                        <li><a href="#">Economiche</a></li>                
                    </ul>                    
                </li>    
                <li><a href="#">Secondi</a></li>
                <li><a href="#">Antipasti</a></li>    
                <li><a href="#">Dessert</a></li>    
                <li><a href="#">Bevande</a></li>
                <li><a href="#">Vegetariane</a></li>
                <li><a href="#">Economiche</a></li>                
            </ul>        
        </div>
    
    </div>
</div>
<!-- [/End Header] -->

Ora, andando per logica, inserendo il z-index all'elemento "#menu ul li ul" dovremmo risolvere, purtroppo però, come ho spiegato prima, la maggior parte delle volte questo sistema non funziona!

Il "segreto" sta nell'assegnare il posizionamento relativo ed il z-index al div #header, ovvero all'elemento genitore, perciò nel css andremo ad inserire una regola di questo tipo:

#header {
    position: relative;
    z-index: 10;
}

Finito! Semplice vero? Ecco il risultato:

Inserisci un commento

#
il 20/11/2011, alle ore 03:51:33
very veryb very xp article
bobby