CSS Menüs: Listen (li)

Menüs sind ein elementarer Bestandteil jeder Webseite. Sie sollten mit viel Bedacht gestaltet werden, um den Anwender so einfach wie möglich, die Struktur der Seite transparent machen.

Größenangaben immer in em der rem angeben, nicht in px (Pixel) und schon gar nicht in pt (Point). Außer bei border und damit zusammenhängenden Angaben (z.B. padding); da ist px angemessen.

Standard Menü

Die meisten Webseiten, meine eingeschlossen, verwenden für ein senkrecht angeordnetes Menü normale Links, die jeweils durch einen Zeilenumbruch <br /> untereinander zu stehen kommen (wegen der inline Eigenschaft des <a> Elements).

<div id="standardmenue">
  <a href="#">Seite 1</a><br />
  <a href="#">Seite 2</a><br />
  <a href="#">Seite 3</a><br />
  <a href="#">Seite 4</a>
</div>

Menü mit block-formatierten Links

Etwas eleganter und mit dem Vorteil, dass sich der Mouseover-Effekt auf die gesamte Zeile auswirkt, ist es, die Links mit display: block zu formatieren. Dadurch werden sie automatisch unter einander angeordnet.

<div id="blockmenue">
  <a href="#">Seite 1</a>
  <a href="#">Seite 2</a>
  <a href="#">Seite 3</a>
  <a href="#">Seite 4</a>
</div>

Dazu das Stylesheet, ohne die Formatierung des umgebenden Kastens.

#blockmenue a {
  display: block;

}

Menü als Liste von Links

Noch eleganter und auch im Sinne eines semantisch korrekten Markups ist es, die Navigation als das zu kennzeichnen, was sie ist: als eine Liste von Links. Die standardmäßigen typischen runden Listen-Markierungen kann man mit "list-style-type:none" unterbinden oder bei Bedarf durch ein beliebiges Bild ersetzen.

<ul id="listenmenue">
  <li><a href="#">Seite 1</a></li>
  <li><a href="#">Seite 2</a></li>
  <li><a href="#">Seite 3</a></li>
  <li><a href="#">Seite 4</a></li>
</ul>

Das dazu gehörende Stylesheet sieht dann so aus (a {display:block} ist nicht notwendig, da li schon ein Block-Element ist:

#listenmenue {
  list-style-type: none; 
}

Horizontales Listen-Menü

Auf diese Weise kann man dann auch, ohne den HTML-Code zu verändern, das Menü horizontal anordnen. Das geschieht, indem man die Listen-Items mit display: inline neben einander stellt.

<ul id="horizmenue">
  <li><a href="#">Seite 1</a></li>
  <li><a href="#">Seite 2</a></li>
  <li><a href="#">Seite 3</a></li>
  <li><a href="#">Seite 4</a></li>
</ul>

Die neue Anordnung geschieht ausschließlich im Stylesheet. Um die typischen Listen-Markierungen braucht man sich nicht zu kümmern, sie erscheinen in inline deklarierten Listen nicht.

#horizmenue {
  width:33em; 
}
#horizmenue li {
  display: inline;
  padding: 0em 0.8em; 
}
#horizmenue a {
  padding: 0.1em 0.8em 0.8em 0.1em; 
}

Horizontales Menü mit Karteireitern (Tabs)

Jetzt sind es nur noch einige CSS-Angaben, um daraus ein Tab-Menü zu erstellen.

<ul id="tabmenue">
  <li><a id="aktuell" href="#">Seite 1</a></li>
  <li><a href="#">Seite 2</a></li>
  <li><a href="#">Seite 3</a></li>
  <li><a href="#">Seite 4</a></li>
</ul>

Das Stylesheet dazu sieht einschließlich der Farbangaben folgendermaßen aus:

#tabmenue {
  padding: 2px;
  border-bottom: 2px solid #222; 
}
#tabmenue li {
  display: inline; 
}
#tabmenue li a {
  padding: 2px 10px;
  margin-left: 0.5em;;
  border: 2px solid #777;
  border-bottom: 0px;
  text-decoration: none; 
  background-color:#F7FCBD;
}
#tabmenue li a#aktuell {
  padding-bottom:4px; 
  border-bottom: 2px solid #fc0;
}
 

Weitere Beispiele

Listamatic - Eine Liste, viele Optionen
zeigt die vielfältigen Möglichkeiten von CSS. Mit Demos von von Eric Meyer, ProjectSeven, SimpleBits, Jeffrey Zeldman und anderen.

Simplified CSS - Dan Cederholm
Eine Legende.
Tabs mit Grafiken statt Text, die sich beim Überfahren mit der Maus ändern, haben normalerweise den Nachteil, dass die Bilder beim Hovern erst geladen werden müssen, der Effekt sich also entsprechend verzögert. Eine raffinierte Methode das zu umgehen hat Dan Cederholm nach einem Trick von Pixy realisiert. Völlig ohne JavaScript und auch für reine Textbrowser geeignet.