2013-05-14 4 views
22

Sto provando a creare un menu a discesa HTML/CSS che sia flessibile in larghezza. A causa dello position:absolute per il secondo livello della navigazione, non ottengo la larghezza del primo livello. Rimozione della posizione: assoluta sposterà tutti gli elementi seguenti su hover ...Posizione CSS assoluta e larghezza del contenitore padre in percentuale

Come posso risolvere questo?

Ecco il codice:

ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    list-style: none; 
 
} 
 

 
.level_1 > li { 
 
    float: left; 
 
    width: 45%; 
 
    background-color: #2FA4CF; 
 
    margin-right: 6px; 
 
} 
 

 
.level_1 > li:hover ul { 
 
    display: block; 
 
} 
 

 
.level_2 { 
 
    display: none; 
 
    position: absolute; 
 
    width: 45%; 
 
} 
 

 
.level_2 li { 
 
    background-color: #535B68; 
 
}
<ul class="level_1"> 
 
    <li> 
 
    <a href="#">Level one (1)</a> 
 
    <ul class="level_2"> 
 
     <li><a href="#">Level two (1)</a></li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Level one (2)</a></li> 
 
</ul> 
 

 
<p>Paragraph</p>

vedere il risultato qui: http://jsfiddle.net/5uf2Y/ Hover "livello uno (1)" e vedrete che il secondo livello non è lo stesso dimensione come il primo livello ...

risposta

41

Hai dimenticato due elementi per la visualizzazione al 100%.

Correction here

1st elementi dimentica è: posizione relativa sul level_1> li

.level_1 > li { 
    float: left; 
    width: 45%; 
    background-color: #2FA4CF; 
    margin-right: 6px; 
    **position:relative;** 
} 

2 ° Elementi di correzioni è: dimensioni cambiamento di secondo li

.level_2 { 
    display: none; 
    position: absolute; 
    width: 100%; 
} 

Con "width:100%" su .level_2 si trasforma automaticamente con la larghezza del suo genitore

+3

Grazie amico, hai reso la mia giornata! – chris

+2

+1 per il salvataggio degli straordinari oggi: p – MaK

3

Aggiungi position:relative al level_1 > li

.level_1 > li { 
    float: left; 
    width: 45%; 
    background-color: #2FA4CF; 
    margin-right: 6px; 
    position:relative; 
} 
+0

Non penso che questo risolva il problema. Vuole che la spaziatura sia la stessa, ha un margine destro che sta dando lo spazio in più – Cam

0

tenta di impostare la proprietà body { width:100%;}, si risolverà il problema, come mostrato di seguito (aggiunto al tuo CSS originale):

body{ width:100%;} 
ul { 
    margin: 0; 
    padding: 0; 
    list-style: none; 
} 
.level_1 > li { 
    float: left; 
    width: 45%; 
    background-color: #2FA4CF; 
    margin-right: 6px; 
} 
.level_1 > li:hover ul { 
    display: block; 
} 
.level_2 { 
    display: none; 
    position: absolute; 
    width: 45%; 
} 

.level_2 li { 
    background-color: #535B68; 
} 
0

Hey man hai un margine di 6px sulla prima riga li ecco perché è un po 'più grande. Vorrei usare un margine a sinistra anziché a destra. Questo dovrebbe risolvere la spaziatura.

+0

Nm, sembra che tu debba andare il 44% in larghezza per farlo funzionare, ma questo non è l'appello reattivo che stai cercando. assumere. – Cam