2013-08-29 17 views
5

Próbuję utworzyć stronę z funkcją nawigacji DOKŁADNIE taką jak ta: http://www.rex-ny.com/, gdzie klikasz element listy, a jego elementy potomne pojawiają się i pozostają.Tworzenie prostego menu wielopoziomowego CSS

Mogę to zrobić za pomocą hover, ale nie mogę dowiedzieć się, jak go zatrzymać, gdy się nie unosi.

Wygląda na to, że najłatwiej jest zrobić najprostszą rzecz.

<ul id="menu"> 
    <li><a href="#">Menu 1</a> 
      <ul> 
       <li><a href="#">Item A</a></li> 
       <li><a href="#">Item B</a></li> 
       <li><a href="#">Item C</a></li> 
      </ul> 
    </li> 
    <li><a href="#">Menu 2</a> 
      <ul> 
       <li><a href="#">Item A</a></li> 
       <li><a href="#">Item B</a></li> 
       <li><a href="#">Item C</a></li> 
      </ul> 
    </li> 
    <li><a href="#">Menu 3</a> 
      <ul> 
       <li><a href="#">Item A</a></li> 
       <li><a href="#">Item B</a></li> 
       <li><a href="#">Item C</a></li> 
      </ul> 
    </li> 
</ul> 

Dzięki

Oto jsfiddle http://jsfiddle.net/phzuC/

+1

można pst skrzypce swojego unoszącego przykład i wtedy jeden z nas może zrobić to kliknąć – Vector

+0

Oto jsfiddle http://jsfiddle.net/phzuC/ – user2730793

+0

@ user2730793 To nie zadziała. Zaraz po puszczeniu myszy menu zniknie. – ninty9notout

Odpowiedz

4

Oto CSS rozwiązanie tylko jako wnioskowanej OP, używając tabindex

DEMO http://jsfiddle.net/kevinPHPkevin/phzuC/2/

#menu li > ul { 
    display:none; 
} 

#menu li:focus > ul { 
    display:block; 
} 
li { 
    outline: 0; 
} 

EDITED

Oto rozwiązanie jQuery, jeśli kiedykolwiek będziesz tego potrzebować. Utrzymuje podmenu otwarte i jest łatwe do wdrożenia. 11 linii kodu.

DEMO http://jsfiddle.net/kevinPHPkevin/phzuC/5/

$(document).ready(function() { 
    $(".nav-top > li").click(function(e) { 
    if($(this).find('ul').hasClass('expanded')) { 
     $(this).find('ul').removeClass('expanded').hide(); 
    } else { 
    $(this).find('ul').addClass('expanded').show(); 
    } 
    }); 
    $('.nav-top a').click(function(e){ 
    e.preventDefault(); 
    }); 
}); 
+0

Ten koleś jest geniuszem! –

+0

Prawdopodobnie powinieneś usunąć atrybut href z przycisków "Menu *". Również to przestanie działać po kliknięciu na wewnętrzne linki. – Itay

+0

To jest dobre rozwiązanie.OP będzie musiał pójść na kompromis z tym ukrywaniem, gdy tylko łącze na pierwszym poziomie straci koncentrację, ale żeby powtórzyć słowa @ TheApptracker, to genialne! – ninty9notout

0

Oto kolejny CSS rozwiązanie tylko że używa albo:

  • wyboru, jeśli chcesz się po menu, aby przełączyć na kliknięcia
  • przyciski opcji, jeśli chcesz menu, aby automatyczne zamykanie po wybraniu innego:

Numer referencyjny:

Demo

Zachowanie podstawowe CSS (demo ma więcej stylizacji do usunięcia domyślnej listy wcięcia/kule)

.sideMenu input[type='radio'], 
.sideMenu input[type='checkbox'] { 
    display: none; 
} 
.sideMenu input[type='radio'] + ul, 
.sideMenu input[type='checkbox'] + ul { 
    position: relative; 
    display: none; 
} 
.sideMenu input[type='radio']:checked + ul, 
.sideMenu input[type='checkbox']:checked + ul { 
    display: block; 
} 

HTML (może być dowolnie głęboka):

<nav class="sideMenu"> 
    <ul> 
     <li> 
      <label for="menu1">Menu 1</label> 
      <input id="menu1" type="checkbox" name="menu1"> 
      <ul> 
       <li><a href="#">Item A</a></li> 
       <li><a href="#">Item B</a></li> 
       <li><a href="#">Item C</a></li> 
      </ul> 
     </li> 
     <!-- repeat --> 
    </ul> 
</nav> 
Powiązane problemy