Sto cercando di implementare un menù con le seguenti caratteristiche:Alla ricerca di un menu a discesa perfetto: allungamento a larghezza intera, elementi di larghezza uguale, puro CSS. Si prega di aiutare risolvere un problema tecnico
- orizzontale;
- voci di menu di larghezza uguale;
- voci di menu distribuite su tutta la larghezza della pagina (non solo la folla sul lato sinistro);
- dinamico (le regole CSS non devono basarsi su un numero predefinito di elementi);
- secondo livello a discesa con elementi allineati verticalmente;
- puro CSS (no JS!).
Questo sembra descrivere un menu perfetto come lo vedo io.
ho quasi succeded rendendo utilizzando la bella display: table-cell;
tecnica (tag sono omessi per semplicità):
<ul>
<li>Menu item</li>
<li>
Expandable ↓
<ul>
<li>Menu</li>
<li>Menu item</li>
<li>Menu item long</li>
</ul>
</li>
<li>Menu item</li>
<li>Menu item</li>
</ul>
ul {
display: table;
table-layout: fixed;
width: 100%;
}
li {
display: table-cell;
text-align: center;
}
li:nth-child(even){
background-color: lightblue;
}
li:nth-child(odd){
background-color: lightskyblue;
}
li ul { display: none; }
li:hover ul {
display: block;
position: absolute;
}
li:hover ul li {
display: block;
}
L'unico problema è che le voci di sottomenu appaiono larghezza piena pagina e in parte al di fuori del browser finestra, forzando la visualizzazione di una barra di scorrimento orizzontale:
Gah! StackOverflow non mi consente di pubblicare immagini. Provalo in diretta su JSFiddle: http://jsfiddle.net/6PTpd/9/
Posso superare questo aggiungendo float: left; clear: both;
a li:hover ul li
. Ma quando lo faccio, voci del sottomenu hanno diverse larghezze:
Fiddle: http://jsfiddle.net/6PTpd/10/
... o larghezza width: 15%;
: http://jsfiddle.net/6PTpd/12/
Entrambe le correzioni sono brutti e risolvere né la questione larghezza pari né il problema barra di scorrimento orizzontale .
UPD Mentre spazzolatura questo post che ho trovato un po 'di soluzione del problema barra di scorrimento: impostato li:hover ul
larghezza a 0. Ma questo le forze per spectify la larghezza delle voci del sottomenu in un valore assoluto. :(Vedi http://jsfiddle.net/6PTpd/13/
Inoltre, questa soluzione può succhiare duro quando l'ultima voce di menu viene espanso A seconda della larghezza dello schermo, può ancora soffiare pagina più larga della finestra:. http://jsfiddle.net/6PTpd/15/
Domande:
- Come faccio voci del sottomenu appaiono stessa larghezza come impresa madre e senza attivare la barra di scorrimento orizzontale?
- c'è un'altra tecnica CSS che permette di creare un menu con tutti i prerequisiti s descritto all'inizio del post?
Ho trovato molti esempi, ma ognuno di essi è non-stretching (fa fluttuare gli elementi a sinistra) o non dinamico (usa le dimensioni prese da un numero predefinito di elementi, per esempio.width: 20%
per ognuno dei cinque articoli di primo livello o, peggio ancora, usa le dimensioni assolute!).
Oh grazie Timothy! Questa soluzione è perfetta. –
La soluzione suggerita da voi GIÀ funziona su tablet! Devi solo rendere l'elemento espandibile di primo livello non cliccabile. : D –
Ah, bene. Sono contento. A proposito, i blues sembrano molto belli insieme. –