CSS navigation with 3 個不同的state (default, active, hover)


這個navigation 令chowky 眼前一亮,真的很難明白為什麼一個developer 會有這麼高的design sense 呢~ 令人羨慕。

見到效果是否覺得不錯呢~。

最難得是簡單直接~~(當然這個東西不太適用於cms 的template design 上,他的做法不是dynamic 的~但得到的是design 上的空間)

HTML 方面都是利用ul (unordered list)

<ul id="topnav">
	<li class="home"><a href="index.htm">Home</a></li>
	<li class="about"><a href="about.htm">About Us</a></li>
	<li class="services"><a href="services.htm">Services</a></li>
	<li class="portfolio"><a href="portfolio.htm">Portfolio</a></li>
	<li class="contact"><a href="contact.htm">Contact</a></li>
	<li class="blog"><a href="blog.htm">Blog</a></li>
</ul>


CSS styling 方面,基本的樣貌已經完成。

1
2
3
4
5
6
7
8
9
10
ul#topnav { 
	margin: 0; padding: 0;
	list-style: none;
	float: left;
	width: 960px; //這是整個menu 的闊 960 x 800 是web design 上的magic number
}
ul#topnav li {
	float: left;
	margin: 0; padding: 0;
}

現在要加上3 個的state,利用了css sprite (chowky 看完才知道原來利用background position 這種technique 是有名堂的呢~)

加完下面的CSS 之後,就會完成了2個state: default 和 hover

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*--CSS Sprites - Default State--*/
ul#topnav a {
	float: left;
	display: block;
	height: 58px; /*--Specify height of navigation--*/
	text-indent: -99999px; /*--Shoot the text off the page--*/
	background-position: left top;
}
/*--CSS Sprites - Hover State--*/
ul#topnav a:hover {
	background-position: left -58px; /*--- coordination system 是left top 代表座標上的(0,0) ,所以(-)是代表向下。*/
}
/*--Assign an image and width to each link--*/
ul#topnav li.home a {
	background-image: url(home_a.jpg);
	width: 120px;
}
ul#topnav li.about a {
	background-image: url(about_a.jpg);
	width: 147px;
}
ul#topnav li.services a {
	background-image: url(services_a.jpg);
	width: 157px;
}
ul#topnav li.portfolio a {
	background-image: url(portfolio_a.jpg);
	width: 182px;
}
ul#topnav li.contact a {
	background-image: url(contact_a.jpg);
	width: 179px;
}
ul#topnav li.blog a {
	background-image: url(blog_a.jpg);
	width: 175px;
}

之後就要加上最後一個state: “Active”。
作的的做法是在html 的tag 上加上 id ,所以每一頁都要在body 的tag 上加上id 的attribute

註:其他不同的navigation 的example 會加多一個class attribute= “active” 再用CSS LOAD active 的圖

Home Page HTML

...
<body id="home">
...

之後就要利用 CSS Specificity 去override default 和 hover states.

因為作者的方法是用不同的圖做的。所以每加一個menu item 就要加一個呢~

#home li.home a, /*--Home Page > Home Link--*/
#about li.about a, /*--About Page > About Link--*/
#services li.services a, /*--Services Page > Services Link--*/
#portfolio li.portfolio a, /*--Portfolio Page > Portfolio Link--*/
#contact li.contact a, /*--Contact Page > Contact Link--*/
#blog li.blog a /*--Blog Page > Blog Link--*/
{
	background-position: left bottom;
}

結構上如下:

Demo: http://www.sohtanaka.com/web-design/examples/active-navigation/blog.htm
Source: http://www.sohtanaka.com/web-design/active-state-in-css-navigations/

  • Share/Bookmark

, , , , ,

  1. No comments yet.
(will not be published)

Anti-Spam Protection by WP-SpamFree