search check home clock-o tag tags chevron-left chevron-right chevron-up chevron-down twitter facebook github rss comment comments terminal code

[CSS][jQuery] Menu w stylu Windows 7 – niesamowity efekt

[CSS][jQuery] Menu w stylu Windows 7 – niesamowity efekt

Dzisiejszy artykuł powstał na bazie inspiracji związanej z Windowsem 7, który mam zainstalowany u siebie. Pomyślałem sobie, żeby spróbować stworzyć efekt rozsuwanego menu rodem z tego systemu.
Efekt się udał, ale w 100% działa w 3-ch przeglądarkach: Mozilla Firefox 3.6.3, Safari 4.0, Google Chrome. W innych przeglądarkach może brakować niektórych szczegółów dekoracyjnych, ale sama idea wysuwanego menu działa.

Najpierw musimy przygotować strukturę menu w HTML:

<div class="kontener">
<div id="win7">
<ul id="menu1">
<li><a href="#"><img src="img/arka.png" alt="" />Arka</a></li>
<li><a href="#"><img src="img/belchatow.png" alt="" />GKS Bełchatów</a></li>
<li><a href="#"><img src="img/cracovia.png" alt="" />Cracovia</a></li>
<li><a href="#"><img src="img/jaga.png" alt="" />Jagiellonia</a></li>
<li><a href="#"><img src="img/korona.png" alt="" />Korona</a></li>
<li><a href="#"><img src="img/lech.png" alt="" />Lech</a></li>
<li><a href="#"><img src="img/lechia.png" alt="" />Lechia</a></li>
<li><a href="#"><img src="img/legia.png" alt="" />Legia</a></li>
<li><a href="#"><img src="img/odra.png" alt="" />Odra</a></li>
<li><a href="#"><img src="img/piast.png" alt="" />Piast</a></li>
<li><a href="#"><img src="img/poloniab.png" alt="" />Polonia B.</a></li>
<li><a href="#"><img src="img/poloniaw.png" alt="" />Polonia W.</a></li>
<li><a><img src="img/trans.png" alt="" /></a></li>
<li><a><img src="img/trans.png" alt="" /></a></li>
<li><a><img src="img/trans.png" alt="" /></a></li>
</ul>
<ul id="menu2">
<li class="ikona"><img src="img/logo.png" alt="" /></li>
<li><a href="#"><span>Opcja 1</span></a></li>
<li><a href="#"><span>Opcja 2</span></a></li>
<li><a href="#"><span>Opcja 3</span></a></li>
<li><a href="#"><span>Opcja 4</span></a></li>
<li><a href="#"><span>Opcja 5</span></a></li>
<li><a href="#"><span>Opcja 6</span></a></li>
</ul>
</div>
 
   <img id="start" src="img/pasek.png" />
</div>

Jak widać, jako 3 ostatnie elementy listy menu1 dałem puste znaczniki z przezroczystym obrazkiem. Ma to na celu wysunięcie elementów, które mają być widoczne w menu, ponad obrazek start.

Kolejnym krokiem jaki uczynimy jest zdefiniowane styli dla naszego menu, dzięki czemu uzyskamy wygląd a'la menu w Windows 7. Zostaną tutaj wykorzystane specyficzne style dla poszczególnych silników przeglądarek.

.kontener {
	float: left;
	overflow: hidden;
	position: relative;
	width: 500px;
	height: auto;
}
#start {
	position: absolute;
	z-index: 100;
	bottom: 0;
	left: 0;
	border-top: #fff solid 1px;
}
#win7 {
	border: solid 1px #102a3e;
	overflow: visible;
	display: inline-block;
	margin: 60px 0 0 20px;
	-moz-border-radius: 5px;
	-webkit-border-radius: 5px;
	position: relative;
	box-shadow: inset 0 0 1px #fff;
	-moz-box-shadow: inset 0 0 1px #fff;
	-webkit-box-shadow: inset 0 0 1px #fff;
	background-color: #619bb9;
	background: -moz-linear-gradient(top, rgba(50, 123, 165, 0.75), rgba(46, 75, 90, 0.75) 50%, rgba(92, 176, 220, 0.75));
	background: -webkit-gradient(linear, center top, center bottom, from(#327aa4), color-stop(45%, #2e4b5a), to(#5cb0dc));
}
#menu1, #menu2 {
	float: left;
	display: block;
	padding: 0;
	list-style: none;
}
#menu1 {
	background: #fff;
	border: solid 1px #365167;
	margin: 7px 0 7px 7px;
	box-shadow: 0 0 1px #fff;
	-moz-box-shadow: 0 0 1px #fff;
	-webkit-box-shadow: 0 0 1px #fff;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
}
#menu1 a {
	border: solid 1px transparent;
	display: block;
	padding: 3px;
	margin: 3px;
	color: #4b4b4b;
	text-decoration: none;
	min-width: 220px;
}
#menu1 a:hover {
	border: solid 1px #7da2ce;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
	box-shadow: inset 0 0 1px #fff;
	-moz-box-shadow: inset 0 0 1px #fff;
	-webkit-box-shadow: inset 0 0 1px #fff;
	background-color: #cfe3fd;
	background: -moz-linear-gradient(top, #dcebfd, #c2dcfd);
	background: -webkit-gradient(linear, center top, center bottom, from(#dcebfd), to(#c2dcfd));
}
#menu1 a img {
	border: 0;
	vertical-align: middle;
	margin: 0 5px 0 0;
}
#menu2 {
	margin: 7px;
	margin-top: -30px;
}
#menu2 li.ikona {
	text-align: center;
}
#menu2 a {
	border: solid 1px transparent;
	display: block;
	margin: 5px 0;
	position: relative;
	color: #fff;
	text-decoration: none;
	min-width: 120px;
}
#menu2 a:hover {
	border: solid 1px #000;
	-moz-border-radius: 3px;
	-webkit-border-radius: 3px;
	box-shadow: 0 0 1px #fff;
	-moz-box-shadow: inset 0 0 1px #fff;
	-webkit-box-shadow: inset 0 0 1px #fff;
	background-color: #658da0;
	background: -moz-linear-gradient(center left, rgba(81, 115, 132, 0.55), rgba(121, 163, 184, 0.55) 50%, rgba(81, 115, 132, 0.55));
	background: -webkit-gradient(linear, 0% 100%, 100% 100%, from(#517384), color-stop(50%, #79a3b8), to(#517384));
}
#menu2 a span {
	padding: 5px;
	display: block;
}
#menu2 a:hover span {
	background: -moz-linear-gradient(center top, transparent, transparent 49%, rgba(2, 37, 58, 0.5) 50%, rgba(63, 111, 135, 0.5));
	background: -webkit-gradient(linear, center top, center bottom, from(transparent), color-stop(49%, transparent),  color-stop(50%, rgba(2, 37, 58, 0.5)), to(rgba(63, 111, 135, 0.5)));
}

Jak pewnie zauważyłeś, bardzo ciekawym i raczej mało znanymi ustawieniami dla atrybutu background-moz-linear-gradient oraz -webkit-gradient. One właśnie są odpowiedzialne za generowanie gradientu w menu, dzięki czemu nie musimy tworzyć dodatkowych obrazków w programach graficznych, odpowiedzialnych za gradient dla menu.
Dodatkowo, są tutaj wykorzystane atrybuty generujące cienie oraz zaokrąglone rogi (z przedrostkami -moz i -webkit).

Ostatnim krokiem jest stworzenie efektu rozwijanego menu. Do tego celu używam biblioteki jQuery, którą należy dodać do pliku HTML w sekcji HEAD.
Kod odpowiedzialny za animację wygląda następująco:

$(document).ready(function(){
	$('.kontener').hover(
		function(){
			$("#win7", this).stop().animate({top:'0px'},{queue:false,duration:200});
		}, function() {
			$("#win7", this).stop().animate({top:'800px'},{queue:false,duration:200});
	});
});

Myślę, że jest on wystarczająco zrozumiały, ponieważ nie wykorzystywałem tutaj żadnych zaawansowanych metod z biblioteki jQuery.

To byłoby na tyle.
Demo z tego artykułu jest dostępne tutaj: rozsuwane menu w stylu Windows 7 - CSS i jQuery