Beat: Korrigierte Fassung

Beitrag lesen

Hier nun die korrigierte Fassung.

Bisher getestet auf FX 3.5, Opera 9.5, MSIE 8

Mich würden Rückmeldungen über Usability und andere kompatibilität freuen.
Bitte die TAB Taste testen.

Falls jemand etwas geschickteres als diese
parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.
kennt, wäre ich auch dankbar.

  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"  
   "http://www.w3.org/TR/html4/strict.dtd">  
<html>  
<head>  
<title>Demo: Multilevel-Menu</title>  
<style type="text/css" id="style">  
/* normalisieren */  
#nav, #nav ul, #nav li {  
	display:block;  
	margin:0;  
	padding:0;  
	list-style:none;  
}  
  
/* Generelle vererbbare Settings innerhalb des Menus */  
#nav {  
	font-size:16px;  
	line-height:24px;  
	color:#000;  
	background:#fff;  
}  
  
/* Alle Labels (a ohne href Attr)  und Links haben ein bestimmtes uniformes aussehen */  
#nav a{  
	display:block;  
	background:#fff;  
	padding: 0 5px;  
}  
  
/* alle aktivierbaren Links haben bestimmte Farben */  
#nav a[href] {  
	text-decoration:none;  
	color:#f00;  
}  
  
/* Die immer sichtbare Menu-Items */  
#nav > li {  
	display:inline;  /* Fix für bestimmte Browser */  
	display:inline-block;  
	position:relative;  
	vertical-align:top;	  
	border:1px solid #000;  
}  
  
/* Die Focus-Linie verbergen, sie wird durch passenden Hintergrund kompensiert */  
#nav *:focus {  
	outline:0;  
}  
  
/* Jeder Level wird absolut positioniert und hat eine definierte Mindestbreite: */  
#nav .level1, #nav .level2, #nav .level3, #nav .level4 {  
	position:absolute;  
	min-width:10em;  
}  
  
/* Alle Levels erhalten ein einheitliches Bild */  
#nav ul {  
	border:1px solid #000;  
}  
  
/* Jedes Item in jedem Level erzeugt einen neuen Koordinatenkontext */  
#nav li {  
	position:relative;  
}  
  
/* Der 1. Level erscheint vertikal unter den Menu-Labels */  
#nav .level1 {  
	top:24px;  
	left: -1999px; 	/* einblenden left:-1px;*/  
}  
  
/* Der 2. bis x. Level erscheint horizontal versetzt neben dem ersten Level */  
#nav .level2, #nav .level3, #nav .level4 {  
	top:-1px;  
	left:-1999px;	/*einblenden left:8em;*/  
}  
  
/* Den Menupfad zur aktuellen Seite hervorheben */  
#nav a.current{  
	background: #aaf;  
}  
  
/* Betone die im moment gehoverten Items */  
#nav a:hover, #nav li.hover >  a {  
	background: #ddd;  
}  
#nav a.current:hover, #nav li.hover >  a.current{  
	background: #aaf;  
}  
  
/* Gebe den Labels, die keine Links sind, Dropdown/right-Pfeil */  
#nav ul a:not([href]):not([class="current page"]):before {  
	float:right;  
	content: "\25b8";  /* Pfeil rechts */  
	padding-left:5px;  
}  
#nav > li > a:not([href]):not([class="current page"]):before {  
	float:right;  
	content: "\25be";  /* Pfeil runter */  
	padding-left:5px;  
}  
  
/* Wir korrigieren die z-index-Werte */  
.level1 { z-index:11; }  
.level2 { z-index:12; }  
.level3 { z-index:13; }  
.level4 { z-index:14; }  
  
/* Interaktives Einblenden  */  
#nav > li:hover .level1, #nav > li.hover .level1           { left:-1px; }  
#nav li:hover > .level2, #nav .level1 >li.hover .level2  { left:10em; }  
#nav li:hover > .level3, #nav .level2 >li.hover .level3  { left:10em; }  
#nav li:hover > .level4, #nav .level3 >li.hover .level4  { left:10em; }  
  
</style>  
</head>  
<body>  
<h1>Demo Multilevel-Dropdown-Menu</h1>  
<p>Es gibt praktische Limiten bei der Zahl der Level.</p>  
<ul>  
	<li>Aus usabilitygründen sollte man eigentlich gar keine Levels verwenden.</li>  
	<li>Ab dem zweiten Level beansprucht jeder Level weiteren horizontalen Platz. Dieser steht aber nicht unbedingt zur Verfügung.</li>  
	<li>Tastatur-Unterstützung für Keyboard (TAB-Taste) bis drei Sublevel.</li>  
	<li>Unterstützung für Browser, welche :hover nicht auf alle Elemente anwenden (zB. MSIE6)</li>  
</ul>  
<hr>  
<p>Der Stand der Dinge</p>  
<ul>  
	<li>FX 3.5 OK</li>  
	<li>Opera 9.5 OK</li>  
	<li>MSIE 8: OK</li>  
</ul>  
<hr>  
<ul id="nav">  
	<li><a>Menu 1</a>  
		<ul class="level1">  
			<li><a href="">Menu 1.1</a></li>  
			<li><a href="">Menu 1.2</a></li>  
			<li><a href="">Menu 1.3</a></li>  
		</ul>  
	</li>  
	<li><a>Menu 2</a>  
		<ul class="level1">  
			<li><a href="">Menu 2.1</a></li>  
			<li><a href="">Menu 2.2</a></li>  
		</ul>  
	</li>  
	<li><a class="current dir">Menu 3</a>  
		<ul class="level1">  
			<li><a href="">Menu 3.1</a></li>  
			<li><a class="current dir">Menu 3.2</a>  
				<ul class="level2">  
					<li><a>Menu 3.2.1</a>  
						<ul class="level3">  
							<li><a href="">Menu 3.2.1.1</a></li>  
							<li><a href="">Menu 3.2.1.2</a></li>  
							<li><a href="">Menu 3.2.1.3</a></li>  
						</ul>  
					</li>  
					<li><a class="current page">Menu 3.2.2</a></li>  
					<li><a href="">Menu 3.2.3</a></li>  
					<li><a href="">Menu 3.2.4</a></li>  
				</ul>  
			</li>  
		</ul>  
	</li>  
	<li><a href="">Menu 4</a></li>  
	<li><a>Grenzfall</a>  
		<ul class="level1">  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
			<li><a href="">Item</a></li>  
		</ul>  
	</li>  
	<li><a>Grenzfall</a>  
		<ul class="level1">  
			<li><a>Grenzfall Level1</a>  
				<ul class="level2">  
					<li><a>Grenzfall Level2</a>  
						<ul class="level3">  
							<li><a>Grenzfall Level3</a>  
								<ul class="level4">  
									<li><a>Grenzfall Level4</a></li>  
								</ul>  
							</li>  
						</ul>  
					</li>  
				</ul>  
			</li>  
		</ul>  
	</li>  
</ul>  
  
<p style="height:25em">Dieser Absatz ist lediglich zur besseren Visualisierung</p>  
<script type="text/javascript">  
function addUsabilityToMenu(id, tabindex){  
	var m = document.getElementById(id);  
	var items = m.getElementsByTagName("a");  
	for( var i=0; i < items.length; i++ ){  
		items[i].onmouseover = function(){  
			this.parentNode.className = "hover";  
		};  
		items[i].onmouseout = function(){  
			this.parentNode.className = "";  
		};  
		items[i].onfocus = function(){  
			this.parentNode.className = "hover";  
			if(this.parentNode.parentNode.parentNode.nodeName=="LI"){  
				this.parentNode.parentNode.parentNode.className="hover";  
				if(this.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="LI"){  
					this.parentNode.parentNode.parentNode.parentNode.parentNode.className="hover";  
					if(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="LI"){  
						this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.className="hover";  
					}  
				}  
			}  
		};  
		items[i].onblur = function(){  
			this.parentNode.className = "";  
			if(this.parentNode.parentNode.parentNode.nodeName=="LI"){  
				this.parentNode.parentNode.parentNode.className="";  
				if(this.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="LI"){  
					this.parentNode.parentNode.parentNode.parentNode.parentNode.className="";  
					if(this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nodeName=="LI"){  
						this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.className="";  
					}  
				}  
			}  
		};  
		items[i].tabIndex = tabindex;//i+11;  
	}  
}  
addUsabilityToMenu("nav", 1);  
</script>  
</body>  
</html>  
  

mfg Beat

--
><o(((°>           ><o(((°>
   <°)))o><                     ><o(((°>o
Der Valigator leibt diese Fische
0 45

Dropdown Menu rür Alle (Bitte testen)

Beat
  • barrierefreiheit
  1. 0

    Rückzug

    Beat
    1. 0

      Korrigierte Fassung

      Beat
      1. 0
        Felix Riesterer
      2. 0

        Ergebnis IE6 im IE-Tester

        Matthias Apsel
      3. 0

        Ergebnis IE7 im IE-Tester

        Matthias Apsel
        1. 0
          Beat
  2. 0
    cross
    1. 1
      suit
      1. 0
        Gunnar Bittersmann
        1. 0
          suit
          1. 0
            Gunnar Bittersmann
            1. 0
              suit
    2. 1
      Beat
      1. 0
        cross (nicht angemeldet)
        1. 0
          dave
        2. 1
          suit
          1. 0
            suit
            1. 0

              :after:after:after{}

              Beat
              • css
              1. 0
                Matthias Apsel
                1. 0
                  Gunnar Bittersmann
                  1. 0
                    Matthias Apsel
                    1. 0
                      Gunnar Bittersmann
                      1. 0
                        Matthias Apsel
            2. 0
              Gunnar Bittersmann
              1. 0
                suit
        3. 0
          Beat
  3. 0
    ScaraX
    1. 0
      Matthias Apsel
      1. 0
        ScaraX
        1. 0
          suit
        2. 0
          Beat
      2. 0
        suit
        1. 0
          Beat
        2. 0
          Matthias Apsel
    2. 0
      Beat
      1. 0
        ScaraX
        1. 0
          Beat
  4. 0

    neue aktuelle Version für Tests

    Beat
    1. 0
      Matthias Apsel
      1. 0
        Beat
        1. 0
          Beat
    2. 0

      Überlegungen

      Matthias Apsel
      1. 0
        Beat
  5. 0

    WIKI Live-Beispiel

    Beat