Grupa MagazynyInternetowe
Online: 955
Menu to jeden z ważniejszych elementów każdej strony internetowej. Występuje w różnych odmianach, ale jego przejrzysta budowa jest jednym z istotniejszych czynników wpływających na łatwość nawigacji w serwisie. Wielu webmasterów decyduje się na menu rozwijane, wykorzystując do tego skomplikowany JavaScript. Czy nie jest to jednak strzelanie z armaty do muchy? Sprawdźmy, czy rozwijane menu można stworzyć wyłącznie za pomocą CSS.
Bartłomiej Dymecki
Dlaczego warto tworzyć rozwijane menu za pomocą CSS? Można wymienić kilka przyczyn. Pierwsza to oszczędność czasu poświęcanego na pisanie skomplikowanego kodu JavaScript. Druga to mniejsza objętość kodu, Należy też pamiętać o osobach, które mogą później pracować ze stworzonym przez ciebie kodem.
Powinien więc być on prosty, przejrzysty, intuicyjny. Trzecia przyczyna to ułatwienie modyfikacji strony przez ciebie samego – np. po kilku latach niezaglądania do jej kodu. Dodać do tego należy jeszcze, że menu w CSS pozwala uniezależnić się od włączonej obsługi JavaScriptu w przeglądarce internetowej osoby odwiedzającej stronę.
Realizację rozwijanego menu należy zacząć od edycji kodu HTML. Powinien on zawierać listę nieuporządkowaną z nadanym identyfikatorem i kilkoma zagnieżdżonymi listami:
Listing zwinięty - 49 linii
Pisanie kodu CSS warto zacząć od wyzerowania
wszystkich marginesów i paddingów oraz dodania
pliku csshover2.htc:
1. * { 2. padding: 0; 3. margin: 0 4. } 5. body { 6. behavior:url("csshover2.htc") 7. }
Plik csshover2.htc jest przeznaczony dla
Internet Explorera. Dzięki niemu możesz stosować
pseudoklasę :hover dla elementów innych niż hiperłącza, czego IE domyślnie nie obsługuje. Plik
znajdziesz do pobrania na stronie http://www.xs4all.nl/~peterned/csshover.html.
Główna lista zawierająca menu musi być
pozycjonowana absolutnie, ponieważ kolejne
zagnieżdżone listy będą pozycjonowane absolutnie
właśnie w odniesieniu do niej. Niestety właściwość
position:relative nie działa poprawnie w Internet
Explorerze. Spójrz więc na kod uzupełniony o elementy
usuwające wypunktowania we wszystkich
użytych listach nieuporządkowanych:
1. #menu { 2. position: absolute; 3. list-style-type: none; 4. } 5. #menu ul { 6. list-style-type: none; 7. }
Następnie należy sprawić, aby elementy głównej listy układały się jeden za drugim, przywracając zarazem normalne zachowanie elementów list zagnieżdżonych:
1. #menu li { 2. float: left 3. } 4. #menu li li { 5. float: none 6. }
Ważnym elementem menu są odnośniki. Zamień je w elementy blokowe tak, aby wypełniły całą zawartość elementów list. Do poniższego kodu dołączone zostały także odpowiednie style reprezentacyjne:
1. #menu li a { 2. display: block; 3. width: 150px; 4. text-align: center; 5. background: #E6E7E8; 6. color: #656E75; 7. padding: 3px 0; 8. text-decoration: underline 9. } 10. 11. #menu li a:hover { 12. background: #CDCECF; 13. color: #383D41; 14. text-decoration: none 15. }
Za główną sztuczkę z rozwijaniem menu odpowiedzialny jest poniższy kod:
1. #menu li ul { 2. position: absolute; 3. height: 1px; 4. overflow:hidden 5. } 6. 7. #menu li:hover ul { 8. height:200px 9. }
Zagnieżdżone listy o wysokości jednego
piksela z zastosowaną właściwością overflow są
praktycznie niewidoczne. Zostają rozszerzone, gdy
kursor myszy znajdzie się nad nadrzędnym dla nich
głównym elementem listy (odpowiada za to druga
reguła). Sposób ten nie zadziałałby poprawnie w
Internet Explorerze, gdyby nie dołączony wcześniej
plik csshover2.htc. Ważną funkcję spełnia tutaj pozycjonowanie
absolutne. Dzięki niemu rozwinięte
listy układają się ponad znajdującą się pod nimi
treścią, nie rozpychając jej.
Musisz pamiętać, że wszystkie elementy menu mają nadaną właściwość float, więc nie ma ono określonej wysokości. Z tej przyczyny należy sztucznie uzupełnić brakującą wysokość strony. Możesz pod kodem zawierającym menu umieścić pudełko z odpowiednią klasą:
<div class="przerwa"></div>
i nadaną jej wysokością:
1. .przerwa { 2. height: 30px; 3. }
Wszystkie zagnieżdżone listy otrzymały identyfikatory, dzięki którym można im nadać dodatkowe style. W ten sposób łatwo przeniesiesz rozwijane menu do swojego serwisu. Cały kod przykładu opisanego w tym artykule znajdziesz w załącznikach do tego artykułu.
Powiązane publikacje
Komentarzy: 9
po co ten div?
elementy floatowane dziłaja badzo dobrze z overflow bez sztucznych pojemników.
"float zawsze trzeba używać w połączeniu z elementami mającymi clear albo overflow, inaczej efekty jego działania będą trudne do przewidzenia."
mnie działa calkiem spoko. Pod IE 6 nie sprawdzałem bo korzysta z tego już tylko 7 % użytkowników (ranking.pl) Jednak mam problem z operą 10. Jak kilka razy rozwinę menu to potem zostaje w pamięci jakby i na obrazku pod menu zostaje ślad po linkach z pod menu. Ktoś wie jak to rozwiązać ?
Hej dlaczego przy ustawieniu padding-left: 0px; dla #menu menu przestaje się rozwijać? Jak to ominąć?
Super artykuł, jestem w szoku =D.
W życiu bym nie pomyślał, że to możliwe za pomocą CSS!
Dlaczego, kiedy zmieniam nazwę pliku z przykładowym menu, program przestaje działać? W jaki zatem sposób przenieść kod do własnego pliku?
Bartłomiej Dymecki od kilku lat publikuje artykuły w Magazynie INTERNET i Internet Makerze. Prowadzi także poświęcony użyteczności blog www.dymecki.pl i firmę realizującą audyty serwisów internetowych.
Artykuły tego autora:
Atrybut background kryje wiele interesujących funkcji, które pozwolą wcielić w życie pomysły nawet najbardziej szalonych grafików. Gradienty, dopasowanie grafiki tła do szerokości strony , ograniczenie jego wielkości? Żaden problem!
Polecamy:
Na skróty:
Magazyny Internetowe| Co za ile| Programy| Praca| Magazyn Internet| Internet Maker| Web Toster| ForumNasze serwisy: