Wygląd menu rozwijanego, otwieranego, wysuwanego
Jeżeli nie odpowiada nam podstawowy wygląd menu, można go zmienić wykorzystując polecenia CSS. W tym celu w pliku menu.css należy wkleić np.:
#menu0 { width: 200px; margin: 10px; padding: 0; } #menu0 dt { background-color: #888; color: #fff; font-weight: bold; text-align: center; cursor: pointer; margin: 10px 0 0 0; padding: 2px; } #menu0 dd { background-color: #eee; color: #000; border-width: 0 1px 1px 1px; border-style: solid; border-color: #888; margin: 0; padding: 1px 5px; } #menu0 dd.active { font-weight: bold; }
W wyróżnionych miejscach wpisano zdefiniowany uprzednio identyfikator menu. Teraz w nagłówku dokumentu HTML (<head>...</head>), na którym wstawione jest menu, wystarczy wstawić odwołanie do utworzonego właśnie zewnętrznego arkusza stylów:
<link rel="stylesheet" href="menu.css">
Przykład
Aby uzyskać następujące wielopoziomowe menu otwierane, imitujące tradycyjne menu aplikacji:
należy użyć kodu HTML:
<dl id="menu0"> <dt>Kurs</dt> <dd> <dl> <dt><a href="...">HTML</a></dt> <dd> <dl> <dt><a href="...">Dla zielonych</a></dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> </dd> <dd> <dl> <dt><a href="...">BODY i META</a></dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> </dd> <dd> <dl> <dt><a href="...">Tekst</a></dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> </dd> </dl> </dd> <dd> <dl> <dt><a href="...">CSS</a></dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> </dd> </dl> <script> new Menu('menu0', 'menu0', true, false, 0, 0, -1, -1, true); </script>
oraz dołączyć następujący arkusz CSS:
#menu0, #menu0 dl { font-size: 12px; position: absolute; width: 150px; margin: 0; padding: 0; border-width: 1px; border-style: solid; border-color: #eee #aaa #aaa #eee; } #menu0 dt { cursor: pointer; margin: 0; padding: 0; background-color: #888; color: #fff; text-align: center; font-weight: bold; font-size: 14px; border-width: 1px; border-style: solid; border-color: #aaa #666 #666 #aaa; padding: 4px 5px; } #menu0 dl dt { background-color: #ccc; color: #000; text-align: left; font-weight: normal; font-size: 12px; border: 0; padding: 0; } #menu0 dd { background-color: #ccc; color: #000; margin: 0; padding: 0; width: 150px; height: 22px; } #menu0 dd.active { font-weight: bold; } #menu0 dt a { background: url("submenu.gif") no-repeat 140px 8px; padding-right: 20px; } #menu0 a:link, #menu0 a:visited { display: block; color: #000; text-decoration: none; padding: 4px 5px; } #menu0 a:hover { color: #fff; background-color: #008; } #menu0 dl { position: absolute; border: 0; } #menu0 dl dd { position: relative; left: 151px; bottom: 22px; border-left: 1px solid #eee; border-right: 1px solid #aaa; }
Aby ustawić kolejne menu otwierane obok siebie, należy wstawić kilka osobnych bloków <dl>...</dl>
, a następnie wypozycjonować je w odpowiednim miejscu względem siebie:
Kod HTML:
<div class="menu"> <dl id="menu1"> <dt>HTML</dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> <script> new Menu('menu1', 'position: absolute', true, true, -1, -1, -1, -1, true); </script> <dl id="menu2"> <dt>CSS</dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> <script> new Menu('menu2', 'position: absolute; left: 150px', true, true, -1, -1, -1, -1, true); </script> <dl id="menu3"> <dt>Skrypty</dt> <dd><a href="...">...</a></dd> <dd><a href="...">...</a></dd> </dl> <script> new Menu('menu3', 'position: absolute; left: 300px', true, true, -1, -1, -1, -1, true); </script> </div>
Arkusz CSS:
.menu { position: relative; } .menu dl { width: 150px; margin: 0; padding: 0; border-width: 1px; border-style: solid; border-color: #aaa #666 #666 #aaa; } .menu dt { margin: 0; padding: 2px 5px; cursor: pointer; background-color: #888; color: #fff; font-weight: bold; text-align: center; } .menu dd { margin: 0; padding: 2px 5px; background-color: #ccc; color: #000; }
Aby połączyć dwa ostatnie przykłady, wystarczy wstawić wszystkie menu w jednym wspólnym bloku, który musi mieć nadaną pozycję relatywną, a kolejne menu powinny być osadzane następująco:
<div class="menu"> <dl id="menu0">...</dl> <script> new Menu('menu0', 'menu0', true, false, 0, 0, -1, -1, true); </script> <dl id="menu1">...</dl> <script> new Menu('menu1', 'menu0', true, false, 0, 0, -1, -1, true); </script> <dl id="menu2">...</dl> <script> new Menu('menu2', 'menu0', true, false, 0, 0, -1, -1, true); </script> </div>
Arkusz stylów będzie taki sam, jak w przykładzie wielopoziomowego menu otwieranego (przedostatni powyżej), z niewielkim dodatkiem:
.menu { position: relative; } #menu1 { left: 150px; } #menu2 { left: 300px; }