Vor ein paar Tagen wollte ich ein modernes HTML-Submenü bauen, welches aufklappt, wenn man mit der Maus über einen Menüpunkt fährt.
Auf diversen Seiten habe ich gesehen, dass viele diese Technik mit JavaScript realisieren. Ich finde das übertrieben, da sich dieser Effekt auch mit der CSS „hover“-Eigenschaft für Listenelemente lösen lässt (Stichwort: Suckerfish CSS). Das funktioniert aber nur in aktuellen Browsern.
Der Internet Explorer 6 unterstützt die „hover“-Eigenschaft nämlich nur für Anker. Wie ich leider feststellen musste, gibt es noch weitere Besonderheiten die man beachten muss. Nach 2 Stunden Arbeit habe ich dann aber einen Code entwickelt, der barrierefrei (ohne den Einsatz von display:none und visibility:hidden) ist und problemlos in Firefox und Internet Explorer 6-7 funktioniert (andere Browser wurden nicht getestet).
Screenshot:
Code:
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 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <title>Floating Navigation</title> <style type="text/css"> * { margin: 0; padding: 0; border: 0; } #navMenu ul { line-height: 30px; } #navMenu li { list-style: none; float: left; position: relative; } #navMenu a { text-align: center; display: block; width: 100px; height: 30px; } /* nested list */ #navMenu ul ul { top: 30px; position: absolute; left: -999em; } #navMenu li:hover ul, #navMenu li.sfhover ul { left: auto; } /* IE7 fix: Prevents that the submenu disappears. */ #navMenu ul ul { background: white; } /* IE6 fix: Displays the submenu items among each other. */ #navMenu li.sfhover ul { width: 100px; } </style> <!--[if IE 6]> <script type="text/javascript"> sfHover = function() { var sfEls = document.getElementById("navMenu").getElementsByTagName("LI"); for (var i=0; i<sfEls.length; i++) { sfEls[i].onmouseover=function() { this.className+=" sfhover"; } sfEls[i].onmouseout=function() { this.className=this.className.replace(new RegExp(" sfhover\\b"), ""); } } } if (window.attachEvent) window.attachEvent("onload", sfHover); </script> <![endif]--> </head> <body> <div id="wrapper"> <div id="navMenu"> <ul> <li> <a href="#">Menu 1</a> <ul> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> <li><a href="#">Submenu 4</a></li> <li><a href="#">Submenu 5</a></li> </ul> </li> <li> <a href="#">Menu 2</a> <ul> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> <li><a href="#">Submenu 4</a></li> <li><a href="#">Submenu 5</a></li> </ul> </li> <li> <a href="#">Menu 3</a> <ul> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> <li><a href="#">Submenu 4</a></li> <li><a href="#">Submenu 5</a></li> </ul> </li> <li> <a href="#">Menu 4</a> <ul> <li><a href="#">Submenu 1</a></li> <li><a href="#">Submenu 2</a></li> <li><a href="#">Submenu 3</a></li> <li><a href="#">Submenu 4</a></li> <li><a href="#">Submenu 5</a></li> </ul> </li> </ul> </div> </div> </body> </html> |
Hinweis: Alle Menüpunkte sind 30 Pixel hoch und 100 Pixel breit. Der gewählte DOCTYPE und die „X-UA-Compatible“-Eigenschaft sind wichtig für die korrekte Darstellung im Internet Explorer.
Das ist zwar eine bekannte aber dennoch eine der besten Möglichkeiten solche Menüs zu realisieren.
Wobei ich die Optimierung für den IE6 übertrieben finde :D. Ich denke der Anteil der IE6 Benutzer rechtfertigt in der heutigen Zeit keinerlei Optimierung in Richtung eben jenes Browsers.
Zur Info: in Google Chrome 10 funktioniert dieser Menütyp einwandfrei.
LG Rainer
Ja, da hast du völlig Recht. Der IE6 ist wahrlich nicht mehr in Mode. Ich betreibe die IE6-Optimierung aber als Sport. 🙂