Próbuję zaimplementować menu z następujących cech:W poszukiwaniu idealnego menu rozwijanego: rozciąganie do pełnej szerokości, elementy o równej szerokości, czysty CSS. Proszę pomóc rozwiązać usterki
- poziomej;
- równe pozycje menu o szerokości;
- pozycje menu rozłożone na całej szerokości strony (nie tylko tłum po lewej stronie);
- dynamiczny (reguły css nie powinny opierać się na uprzednio zdefiniowanej liczbie pozycji);
- rozwijany drugi poziom z pozycjami wyrównanymi pionowo;
- czysty CSS (bez JS!).
Wydaje się to opisywać doskonałe menu, jak to widzę.
Mam prawie succeded czyniąc go przy pięknej display: table-cell;
techniki (znaczniki są pominięte dla uproszczenia):
<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;
}
Jedynym problemem jest to, że pozycje podmenu pojawiają szerokość całej strony, a częściowo poza przeglądarką okno, zmuszając poziomy pasek przewijania do wyświetlenia:
Gah! StackOverflow nie pozwoli mi publikować obrazów. Przetestuj to na żywo na JSFiddle: http://jsfiddle.net/6PTpd/9/
Mogę to przezwyciężyć, dodając float: left; clear: both;
do li:hover ul li
. Ale kiedy zrobić, pozycje podmenu mają różne szerokości:
Fiddle: http://jsfiddle.net/6PTpd/10/
... lub szerokość width: 15%;
: http://jsfiddle.net/6PTpd/12/
Obie poprawki są brzydkie i rozwiązać problem, ani równe, ani szerokość poziomego paska przewijania problem .
UPD podczas mycia się ten post Znalazłem jakieś rozwiązanie problemu paska przewijania: set li:hover ul
szerokość 0. Ale to siły do spectify szerokość punktów podmenu w wartości bezwzględnej. :(Zobacz http://jsfiddle.net/6PTpd/13/
Ponadto, rozwiązanie to może ssać twardy, gdy ostatnia pozycja menu jest rozszerzona w zależności od szerokości ekranu, to może wciąż dmuchać strony szerszy niż okno. http://jsfiddle.net/6PTpd/15/
pytania:
- Jak zrobić pozycje podmenu pojawiają się te same szerokości jak rodzica i bez włączania poziomego paska przewijania?
- Czy istnieje inna technika CSS, który umożliwia tworzenie menu z wszystkimi warunek s opisane na początku postu?
Znalazłem wiele przykładów, ale każdy z nich jest albo nierozciągany (unosi elementy po lewej), albo nie jest dynamiczny (używa rozmiarów pobranych z predefiniowanej liczby pozycji, np.width: 20%
dla każdego z pięciu elementów pierwszego poziomu lub, co gorsza, używa bezwzględnych rozmiarów!).
Och, dziękuję, Timothy! To rozwiązanie jest idealne. –
Rozwiązanie zaproponowane przez Ciebie JUŻ działa na tabletach! Musisz tylko uczynić element rozwijany najwyższego poziomu niemożliwym do kliknięcia. : D –
Ach, dobrze. Cieszę się. Przy okazji, ładny design, te bluesowe wyglądają całkiem nieźle razem. –