Menu mit Submenu - Accessible List

Richtig verschachtelte Listen haben oberste Priorität im Barrierefeien Webdesign. Mit simplen Listen und CSS können radikal verschiedene Listen-Looks kreiert werden. 

Menu in neuem Fenster ansehen.


1. HTML erstellen

Als Grundlage und Struktur dient für dieses Beispiel eine einfach verschachtelte HTML-Liste.

<ul>
  <li><a href="#">Gadgets</a>
    <ul>
    <li><a href="#">Bags</a></li>
    <li><a href="#">Shoes</a></li>
    <li><a href="#">Accessoires</a></li>
    </ul>
  </li>
  <li><a href="#">Projects</a>
    <ul>
    <li><a href="#">Art</a></li>
    <li><a href="#">CSS</a></li>
    <li><a href="#">Websites </a></li>
    </ul>
  </li>
</ul>

2. CSS für die Liste

Die Hauptlistenpunkte li haben float:left, bei den Unterlisten wird das float:left aufgehoben, so dass diese wieder untereinder dargestellt werden.

nav ul {
  float: left;
  list-style-type: none;
  margin: 0;
  padding: 0;
  }
nav li {
  width: 120px;
  float: left;
  padding: 0;
  margin: 0 3px 0 0;
  }

nav li li { float: none;}

2. CSS für die Links

Hier ist die Freiheit grenzenlos. Die Links können sehr einfach mit Hintergundbildern, Tranparenz etc. erweitert werden.
Alle Links können vom Kontext #navi li abhängig gemacht werden. display:block macht aus den Inline-Element Link ein Block-Element.

nav a {
  display:block; 
  text-decoration: none;
  font-size: 1.3em;
  color:#fff;
  background-color: #999; 
  border:1px solid #777;
  padding: 3px 10px;
  margin: 0 0 3px;
  }

Für die Sublinks und den a:hover müssen nur noch die Änderungen definiert werden.

nav a:hover {
  color:#564b47;
  background-color: #ddd; 
  }
nav li li a {
  font-size: 1em;
  color:#564b47;
  background-color: #eee; 
  border:1px solid #ccc;
  }

3. Clear

Zuletzt kommt der clear, damit wird das float wieder aufgehoben. Das ist wichtg weil float vererbt wird, float und clear gehören immer zusammen.

.clr{ clear:left; }

Oder mit CSS3 Pseudoselektor

nav:after {
    height: 0;
    content: ".";
    display: block;
    clear: both;
    visibility: hidden;
}