Menu z nagłówkami
W jaki sposób wykonać menu nawigacyjne z nagłówkami (tytułami działów) na liście definicyjnej (słownik)?
Choć wykonanie menu w oparciu o listę daje naprawdę duże możliwości, to powstaje mały problem, jeśli przed blokiem ma się wyświetlić nagłówek w formie tytułu działu. Istnieje inny element, który zapewnia taki podział pozycji - lista definicyjna (słownik). Specyfikacja HTML 4.01 podaje alternatywne zastosowania tego znacznika - np. do przedstawiania dialogu. Można zatem przyjąć, że lista definicyjna reprezentuje pozycje połączone ze sobą w taki sposób, że zawartość <dd>...</dd>
stanowi rozwinięcie (uszczegółowienie) <dt>...</dt>
, przy czym jedna pozycja może być połączona z dowolną liczbą innych pozycji. Z taką sytuacją mamy właśnie do czynienia w przypadku menu nawigacyjnego z nagłówkami: odnośniki, zawarte w znacznikach <dd>...</dd>
, stanowią rozwinięcie krótkiego nagłówka, zapisanego wewnątrz <dt>...</dt>
- taki kod również jest poprawny semantycznie:
<dl> <dt>CSS</dt> <dd><a href="czcionki.html">Czcionki</a></dd> <dd><a href="tekst.html">Tekst</a></dd> <dd><a href="tlo.html">Tło</a></dd> <dd><a href="marginesy.html">Marginesy</a></dd> <dd><a href="obramowanie.html">Obramowanie</a></dd> </dl>
Efekt bez stylizacji:
Oczywiście takie menu może zawierać więcej niż jeden nagłówek.
Aby mieć możliwość swobodnego stylizowania, usuwamy domyślne formatowanie listy:
dl, dt, dd { display: block; margin: 0; padding: 0; }
W efekcie uzyskamy:
dl, dt, dd { display: block; margin: 0; padding: 0; } dl { width: 200px; } dt { background-color: #ccc; color: #000; padding: 7px; font-weight: bold; font-size: larger; text-align: center; } dl a:link, dl a:visited { display: block; width: 186px; text-decoration: none; background-color: #ccc; color: #000; padding: 5px; border: 2px outset #ccc; } dl a:hover { border-style: inset; padding: 7px 3px 3px 7px; }
dl, dt, dd { display: block; margin: 0; padding: 0; } dl { width: 200px; padding: 1px 2px; background-color: #9ce; border: 3px double #28e; } dt { padding: 7px 15px; font-weight: bold; font-size: larger; background-color: #25b; color: #9ce; text-align: right; border-right: 20px solid #26d; margin-top: 1px; } dd { border-top: 1px solid #9ce; } dl a:link, dl a:visited { display: block; width: 176px; text-decoration: none; padding: 7px; font-weight: bold; background-color: #27c; color: #def; border-left: 10px solid #25b; } dl a:hover { width: 166px; background-color: #28e; color: #fff; border-left: 20px solid #26d; }
dl, dt, dd { display: block; margin: 0; padding: 0; } dt { width: 180px; padding: 5px 10px; font-weight: bold; font-size: larger; text-align: center; background: #797 url("tlo2.gif") repeat-x top; color: #eff; border-width: 1px; border-style: solid; border-color: #dfe #365 #365 #dfe; } dd { width: 190px; padding-left: 10px; background: #797 url("punkt.gif") no-repeat left top; border-width: 1px; border-style: solid; border-color: #dfe #365 #365 #dfe; } dl a:link, dl a:visited { display: block; width: 169px; text-decoration: none; padding: 5px 10px; font-weight: bold; background: #bfb url("tlo.gif") repeat-x top; color: #365; border-left: 1px solid #797; } dl a:hover { background-color: #797; background-image: url("tlo2.gif"); color: #eff; }
Wymagane grafiki (punkt.gif, tlo.gif, tlo2.gif) w powiększeniu: