tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 2 Beitrag von spicelab
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
321
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    anve anve ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    28
    Hallo!

    Wie kann ich ein Menü mit Submenü-Elementen erstellen?

    Ich habe bereits folgende ungeordnete Liste:
    HTML-Code:
    <ul>
       <li><a href="#">Menüpunkt 1</a></li>
       <li><a href="#">Menüpunkt 2</a></li>
       <li><a href="#">Menüpunkt 3</a></li>
       <li><a href="#">Menüpunkt 4</a></li>
       <li><a href="#">Menüpunkt 5</a></li>
    </ul>
    Nun sollten die Submenüs dazukommen:
    HTML-Code:
    <ul>
       <li><a href="#">Menpunkt 1 Level 1</a>
          <ul>
             <li><a href="#">Menüpunkt 1.1</a></li>
             <li><a href="#">Menüpunkt 1.2</a></li>
             <li><a href="#">Menüpunkt 1.3</a></li>
          </ul>
       </li>
       <li><a href="#">Menüpunkt 2</a>
          <ul>
             <li><a href="#">Menüpunkt 2.1</a></li>
             <li><a href="#">Menüpunkt 2.2</a></li>
             <li><a href="#">Menüpunkt 2.3</a></li>
          </ul>
       </li>
       <li><a href="#">Menüpunkt 3</a></li>
       <li><a href="#">Menüpunkt 4</a></li>
       <li><a href="#">Menüpunkt 5</a></li>
    </ul>
    Wenn der User auf ein Menülevel 1 klickt, sollen alle Unterpunkte von Level 1 eingeblendet werden (1.1, 1.2, 1.3). Wie kann ich so etwas realisieren? CSS/JavaScript? Es soll auch für IE7 funktionieren.

    Vielen Dank im Voraus.
     

  2. #2
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.361
    Blog-Einträge
    4
    Mit CSS kann man leider keine Klicks gesondert behandeln. Aber viele nutzen auch den :hover-Effekt.

    Mit JavaScript geht das auf jeden Fall:
    HTML-Code:
    <!-- onclick-Event hinzufügen! -->
    <li><a href="#" onclick="menuClicked(this)">Menpunkt 1 Level 1</a>
    Der JS-Code:
    Code javascript:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function menuClicked(obj)
    {
      var ulList = obj.parentNode.getElementsByTagName("ul")[0];
      
      if (ulList.style.display=='block')
        ulList.style.display = 'none';
        
      else
        ulList.style.display = 'block';
    }

    Und um alle im Ausgangszustand zu verstecken, der CSS-Code:
    Code css:
    1
    2
    3
    4
    
    #menu li ul
    {
      display: none;
    }
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  3. #3
    threadi threadi ist offline Mitglied Brokat
    Registriert seit
    Dec 2006
    Ort
    Leipzig
    Beiträge
    478
    Klicks gehen theoretisch auch im CSS, mittels :focus. Ich nutze aber auch eher die :hover-Möglichkeiten, da es für den Anwender eher intuitiv ist.
     

  4. #4
    Avatar von spicelab
    spicelab spicelab ist offline ZENmechanic
    Registriert seit
    Feb 2010
    Beiträge
    1.744
    Zitat Zitat von ComFreek Beitrag anzeigen
    Mit CSS kann man leider keine Klicks gesondert behandeln.

    Mit JavaScript geht das auf jeden Fall:
    Ohne JS, dafür in CSS mit den Pseudoklassen :active und :focus mittlerweile auch browserübergreifend
    1. http://www.cssplay.co.uk/menus/csspl...-droplist.html
    2. http://www.cssplay.co.uk/menus/cssplay-click-slide.html
    3. http://www.cssplay.co.uk/menus/csspl...ck-flyout.html
    4. http://www.cssplay.co.uk/menus/csspl...-dropline.html
    5. http://www.cssplay.co.uk/menus/csspl...-drop-fly.html

    Zitat Zitat von anve Beitrag anzeigen
    Es soll auch für IE7 funktionieren.
    Deine Bedingung wird von allen fünf Menüvarianten erfüllt
    Geändert von spicelab (13.08.11 um 09:53 Uhr) Grund: Tipp-Ex
    anve und ComFreek bedanken sich. 

  5. #5
    Avatar von ComFreek
    ComFreek ComFreek ist offline [x] Let it be logic!
    tutorials.de Moderator
    Registriert seit
    Jun 2009
    Beiträge
    2.361
    Blog-Einträge
    4
    Zitat Zitat von spicelab Beitrag anzeigen
    Ohne JS, dafür in CSS mit den Pseudoklassen :active und :focus mittlerweile auch browserübergreifend
    Habe bisher immer :hover-Menüs benutzt. Ich muss mir diese mal anschauen
     
    mfg ComFreek

    Falls ich dir geholfen habe, würde ich mich über ein DANKE freuen!
    Kenn mich am besten aus in C++, WEB-Sprachen (PHP, HTML, JavaScript) und vllt. mehr
    [PHP] Überprüfen, ob Website erreichbarSicherheit in PHP-Codes schaffenGoogle Chrome-Extension für tutorials.dejson_compress()

  6. #6
    Avatar von spicelab
    spicelab spicelab ist offline ZENmechanic
    Registriert seit
    Feb 2010
    Beiträge
    1.744
    Zitat Zitat von ComFreek Beitrag anzeigen
    Habe bisher immer :hover-Menüs benutzt. Ich muss mir diese mal anschauen
    Wohl bekomm's!
     

  7. #7
    Avatar von hela
    hela hela ist offline Mitglied Smaragd
    tutorials.de Premium-User
    Registriert seit
    Oct 2004
    Beiträge
    1.123
    Hallo,

    ich würde für eine CSS-Lösung die target-Pseudoklasse verwenden. Dafür müsstest du den UL-Elementen der Submenüs eine ID geben und so ankerfähig machen. Die Links in den Hauptmenüpunkten zielen dann auf diese "following-sibling"-Elemente:
    HTML-Code:
    <ul id="menu">
       <li><a href="#mp1">Menpunkt 1 Level 1</a>
          <ul id="mp1">
             <li><a href="#">Menüpunkt 1.1</a></li>
             <li><a href="#">Menüpunkt 1.2</a></li>
             <li><a href="#">Menüpunkt 1.3</a></li>
          </ul>
       </li>
       <li><a href="#mp2">Menüpunkt 2</a>
          <ul id="mp2">
             <li><a href="#">Menüpunkt 2.1</a></li>
             <li><a href="#">Menüpunkt 2.2</a></li>
             <li><a href="#">Menüpunkt 2.3</a></li>
          </ul>
       </li>
       <li><a href="#">Menüpunkt 3</a></li>
       <li><a href="#">Menüpunkt 4</a></li>
       <li><a href="#">Menüpunkt 5</a></li>
    </ul>
    Die zugehörige CSS-Regel würde dann so aussehen:
    Code css:
    1
    
    ul#menu li a + ul[id]:not(:target) { display: none; }
    Leider wird das vom Internet-Explorer bis einschließlich v8 nicht unterstützt, so dass dafür so ähnlich wie im Tutorial CSS3-Accordion (fast) ohne Javascript mit Javascript oder jQuery innerhalb von "Conditional Comments" nachgeholfen werden kann.
     

  8. #8
    anve anve ist offline Mitglied Bronze
    Registriert seit
    Apr 2007
    Beiträge
    28
    Danke für die vielen Infos! Ich habe mal das hier nachgebaut.

    Was mir dabei aufgefallen ist:
    -nach Klick auf ein Menü-Element klappt das Menü zusammen
    -Problem bei der Höhe zwischen IE9 und FF5 (siehe Anhang):

    Das letzte Element hat zu wenig Höhe. Ich kann die Werte so einstellen, dass es im IE & Opera geht oder nur für den FF geht.

    HTML-Code:
    		<div id="SubMenuOuter">				
    			<ul id="SubMenu">
    				<li class="SubMenu1">
    						<a href="#" class="SubMenu1" tabindex="1">Menü</a>
    						<ul class="sub3">
    							<li class="SubMenu2"><a href="#" class="SubMenu2">text1</a></li>
    							<li class="SubMenu2"><a href="#" class="SubMenu2">text2</a></li>
    							<li class="SubMenu2"><a href="#" class="SubMenu2">text3</a></li>
    						</ul>
    				</li>
    			</ul>
    		</div>
    Code css:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    
    /* ================================================================ 
    This copyright notice must be untouched at all times.
     
    The original version of this stylesheet and the associated (x)html
    is available at [url]http://www.cssplay.co.uk/SubMenus/cssplay-click-slide.html[/url]
    Copyright (c) 2005-2011 Stu Nicholls. All rights reserved.
    This stylesheet and the associated (x)html may be modified in any 
    way to fit your requirements.
    =================================================================== */
    /* this is a CSS answer to fix the hover/focus '~' and hover/focus '+' problem in safari and chrome */
    /* tabindex="1" in the link code to fix the 'focus persist' problem in safari and chrome */
    html {-webkit-animation: safariSelectorFix infinite 1s;}
    @-webkit-keyframes safariSelectorFix {
        0% {zoom:1;} 
        100% {zoom:1;}
    }
     
    #SubMenuOuter {
        position:absolute;
        top:390px;
        margin-left:30px;
        height:300px;
        width:200px;
        z-index:10;
    }
     
    /* for Internet Explorer to force a SubMenu refresh after :active + ul */
    #SubMenu li a, body {behavior:url(trigger.htc)}
     
    #SubMenu {
        padding: 0 0 10px 10px;
        list-style:none;
        /*position:absolute;
        top:390px;
        margin-left:30px;
        width:180px;*/
        background-color:#fcb344;
        /* Round corners not for IE8 and below*/
        -webkit-border-top-left-radius:15px;
        -khtml-border-top-left-radius:15px;
        -moz-border-radius-topleft:15px;
        border-top-left-radius:15px;
        -webkit-border-top-right-radius:15px;
        -khtml-border-top-right-radius:15px;
        -moz-border-radius-topright:15px;
        border-top-right-radius:15px;
        -webkit-border-bottom-left-radius:15px;
        -khtml-border-bottom-left-radius:15px;
        -moz-border-radius-bottomleft:15px;
        border-bottom-left-radius:15px;
        -webkit-border-bottom-right-radius:15px;
        -khtml-border-bottom-right-radius:15px;
        -moz-border-radius-bottomright:15px;
        border-bottom-right-radius:15px;
    }
     
    #SubMenu li a.SubMenu1 {
        display:block;
        text-decoration:none;
        color:#404041;
        padding-left:4px;
        line-height:26px;
    }
     
    #SubMenu ul li a.SubMenu2 {
        /*display:block;*/
        text-decoration:none;
        color:#404041;
        line-height:14px;
    }
     
    #SubMenu ul {
        margin:0;
        padding:0;
        height:0;
        overflow:hidden;
        list-style:none;
    }
     
    #SubMenu li.SubMenu1 {
        display:block;
        /* for IE7 to remove the vertical gap between list items */
        *float:left;
        list-style:none;
        /*padding:5px 0 5px 0;*/
        border-bottom-style:solid;
        border-color:#fdbf63;
        width:187px;
        background-image:url(../images/SubMenu1Button.png);
        /*background-position:center;*/
        background-repeat:no-repeat;
    }
     
    #SubMenu li.SubMenu1:hover {
        display:block;
        background-image:url(../images/SubMenu1ButtonHover.png);
        /*background-position:center;*/
    }
     
    #SubMenu li.SubMenu2 {
        display:block;
        /* for IE7 to remove the vertical gap between list items */
        *float:left;
        list-style:none;
        padding:5px 0 5px 21px;
        border-bottom-style:solid;
        border-color:#fdbf63;
        width:167px;
        background-image:url(../images/SubMenu2Button.png);
        background-position:center;
        background-repeat:no-repeat;
    }
     
    #SubMenu li.SubMenu2:hover {
        display:block;
        background-image:url(../images/SubMenu2ButtonHover.png);
    }
     
    #SubMenu li.last {
        border:none;
    }
    /* zu testzwecken */
    /*#SubMenu ul.sub3 {height:84px;}*/
     
    #SubMenu li a:active + ul, #SubMenu li a:focus + ul {
        /*padding:5px 0 0 0;*/
        background-image:url(../images/SubMenu2Button.png);
        background-position:center;
        background-repeat:no-repeat;
    }
     
    #SubMenu li a:active + ul.sub3, #SubMenu li a:focus + ul.sub3 {
        height:78px;
    }
     
    #SubMenu li a:active + ul.sub4, #SubMenu li a:focus + ul.sub4 { 
        height:110px;
    }
     
    #SubMenu li a:active + ul.sub5, #SubMenu li a:focus + ul.sub5 {
        height:140px;
    }
     
    /*#SubMenu li ul {padding:10px 0 10px 0;}*/
     
    /*
    #SubMenu li ul:hover {padding:0 0 10px 0;}
    #SubMenu li ul.sub3:hover {height:70px;}
    #SubMenu li ul.sub4:hover {height:110px;}
    #SubMenu li ul.sub5:hover {height:140px;}
    */

    Bin für Tips dankbar!

    Edit:
    Hab bisschen beim CSS rumgespielt und es nun sein lassen. Thread geschlossen.
    Miniaturansicht angehängter Grafiken Miniaturansicht angehängter Grafiken Menü zeigt bei Klick Untermenüpunkte an-ffvsieheight.png  
    Geändert von anve (07.09.11 um 22:49 Uhr)
     

Ähnliche Themen

  1. JQuery - Untermenüpunkte sliden lassen
    Von Jan-Frederik Stieler im Forum Javascript & Ajax
    Antworten: 3
    Letzter Beitrag: 29.11.10, 22:59
  2. Untermenüpunkte bei Bedarf ausblenden
    Von LuvShining im Forum CSS
    Antworten: 1
    Letzter Beitrag: 22.03.05, 06:24
  3. Bei Klick: Bildwechsel im JS-Menü
    Von bocadillochef im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 02.01.05, 18:50
  4. Dropdown Menü zeigt falsches Menü
    Von Blattspinat im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 05.11.04, 09:42
  5. Menü auf Klick ausblenden
    Von ovakill im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 31.08.04, 15:54