Blog (55)
Komentarze (1.1k)
Recenzje (0)
@arlidCiekawe menu z pomocą CSS

Ciekawe menu z pomocą CSS

06.01.2012 19:01

Skąd wpis - właściwie z prośby. Ostatnio kolega poprosił mnie o rozwiązanie jego problemu. Chciał uzyskać takie menu:

402884

Problemem było to, że na stronie nie mogło być żadnego skryptu JS, PHP, mógł być jedynie czysty HTML no i ostylowanie, no więc pozostało wykorzystać CSS.

Jak zrobić coś takiego? No wiadomym jest, że trzeba użyć :hover, lecz pytanie jakie mi zadał brzmiało po prostu: Jak? Zapewne metod rozwiązania tego „problemu” jest wiele, i nie zamierzam nikomu wmawiać jakie jest najlepsze, najwspanialsze itd. być może komuś ten sposób wyda się odpowiedni i ciekawy.

Od czego zacząć?

Najpierw musimy stworzyć nasze menu w programie graficznym. Po jego utworzeniu zmieniamy rozmiar obszaru roboczego podnosząc wysokość 2- krotnie – jak w przykładzie.

402889

Teraz „duplikujemy” nasze menu i przenosimy jest pod spód. "Dolne" wykonujemy tak jak wyglądałoby po najechaniu myszy (nasz :hover). Kolejny krokiem jest pocięcie go zgodnie z tym jak wykonaliśmy na pojedyncze „odnośniki”

402891

Możemy nazwać je kolejno menu1.jpg, menu2.jpg, itd.. Wysokość tych "pociętych" odnośników wynosi 120px (zawiera górne i dole „menu” z projektu). Wycinamy także skrajne lewe brzegi i tło samego menu (te obrazki mają wysokość 60px;)

Ale po co mi obrazki? Para buch maszyna w ruch :)

No faktycznie z obrazków nam nic nie przybędzie. Otwieramy edytor i lecimy. Na początku struktura menu.

Sprawa HTML'a

Z pewnością najłatwiej będzie umieścić odnośniki w liście. Napiszmy ją więc nadając jej identyfikator navi:

<ul id="navi">
<li><a href="#">menu4</a></li>
<li><a href="#">menu3</a></li>
<li><a href="#">menu2</a></li>
<li><a href="#">menu1</a></li>
</ul>

Skoro mamy już listę to dodajmy także lewy i prawy brzeg naszego menu:


<div class="bok"></div>
<ul id="navi">
<li><a href="#">menu4</a></li>
<li><a href="#">menu3</a></li>
<li><a href="#">menu2</a></li>
<li><a href="#">menu1</a></li>
</ul>
<div class="bok"></div><!-- DIV skrajnego prawego brzegu --›

Można zapytać dlaczego lewy skrajny brzeg i prawy skrajny brzeg są takie same, otóż składają się z tego samego – jednego obrazka, więc korzystamy z tego samego kodu..

Aby można było w razie konieczności menu umieścić tam gdzie chcemy otoczmy cały nasz kod zamykając go w jednym „pudełku” o identyfikatorze menu:



<div id="menu">
<div class="bok"></div>
<ul id="navi">
<li><a href="#">menu4</a></li>
<li><a href="#">menu3</a></li>
<li><a href="#">menu2</a></li>
<li><a href="#">menu1</a></li>
</ul>
<div class="bok"></div>
</div>

Tak oto wygląda kod HTML naszego menu. Zabierzmy się za wygląd.

Sprawa stylu

Umieśćmy zatem nasze menu w jakimś miejscu na stronie:


#menu {
width:960px; /* Szerokość naszego menu*/
margin:30px auto; /* Dolny i górny margines menu 30px, menu wyśrodkowane*/
}

Gdy już to zrobiliśmy zajmijmy się jego wyglądem. Na początek nadajmy mu ogólny wygląd i strukturę.


ul#navi{
background:url('menubg.jpg') repeat-x; /* Tło dla całego menu, powtarzane po osi X*/
height:60px; /*  Wysokość menu, połowa wysokości obrazka menu1.jpg, menu2.jpg itd...*/
margin:0; 
padding:0;
list-style: none;
float: left;
width: 960px;
}
ul#navi li { /* Każdy „odnośnik” naszego menu */
float: right;
margin-right:10px;
padding:0;
}

Dobrze mając zatem ogólny zarys zajmijmy się poszczególnymi odnośnikami i skrajnymi bokami:


a.menu1, a.menu2, a.menu3, a.menu4 {
display:inline-block;
height:60px;
overflow:hidden;
text-indent: -9999px; /* Ukrycie tekstów  odnośników */
}

a.menu1{
background: url(menu1.jpg) no-repeat; /* Obrazek z odnośnikiem 1 */
width:143px; /*Szerokość obrazka menu1.jpg */
}

a.menu2{
background: url(menu2.jpg) no-repeat;
width:75px;
}

a.menu3{
background: url(menu3.jpg) no-repeat;
width:110px;
}

a.menu4{
background: url(menu4.jpg) no-repeat;
width:88px;
}

I skrajne bogi:


.bok{
background:url('menuleft.jpg') no-repeat;
height:60px;
width:10px;
float:left;
}
Dobrze, ale co z :hoverem i efektem po najechaniu myszką?

Spójrzmy na nasze obrazki odnośników. Na gorze mamy nasze menu w stanie „spoczynku”, na dole takie jakie ma zobaczyć odwiedzający po najechaniu na nie myszka. Przesuńmy więc obrazek do góry o 60px ukazując mu ten dolny.


a.menu1:hover, a.menu2:hover, a.menu3:hover, a.menu4:hover{
background-position: 0px -60px;
}

Zatem cały kod CSS naszego menu wygląda tak:


#menu {
width:960px; /* Szerokość naszego menu*/
margin:30px auto; /* Dolny i górny margines menu 30px, menu wyśrodkowane*/
}

ul#navi{
background:url('menubg.jpg') repeat-x; /* Tło dla całego menu, powtarzane po osi X*/
height:60px; /*  Wysokość menu, połowa wysokości obrazka menu1.jpg, menu2.jpg itd...*/
margin:0; 
padding:0;
list-style: none;
float: left;
width: 960px;
}

ul#navi li { /* Każdy „odnośnik” naszego menu */
float: right;
margin-right:10px;
padding:0;
}

.bok{
background:url('menuleft.jpg') no-repeat;
height:60px;
width:10px;
float:left;
}

a.menu1, a.menu2, a.menu3, a.menu4 {
display:inline-block;
height:60px;
overflow:hidden;
text-indent: -9999px; /* Ukrycie tekstów  odnośników */
}

a.menu1{
background: url(menu1.jpg) no-repeat; /* Obrazek z odnośnikiem 1 */
width:143px; /*Szerokość obrazka menu1.jpg */
}

a.menu2{
background: url(menu2.jpg) no-repeat;
width:75px;
}

a.menu3{
background: url(menu3.jpg) no-repeat;
width:110px;
}

a.menu4{
background: url(menu4.jpg) no-repeat;
width:88px;
}

a.menu1:hover, a.menu2:hover, a.menu3:hover, a.menu4:hover{
background-position: 0px -60px;
}

Pozostaje nam uruchomić plik html (wraz z zainicjowanym stylem CSS) i zobaczyć nasze menu w działaniu.

Oczywiście każdy ma własne zdanie dotyczące danych kwestii nie zamierzam go w żaden sposób podważać, czy obrażać kogokolwiek w jakikolwiek sposób. Przepraszam także za ewentualne błędy.

Wybrane dla Ciebie
Komentarze (19)