drop-down

下拉菜單

這種方法是基於 A List Part 介紹的 Suckerfish Dropdowns 技術實現的。這個菜單也是基於簡單的無序列表實現的。頂級的菜單項是一個主列表,每個主菜單對應的下拉菜單項將放在內嵌列表中:

首先爲頂級菜單添加樣式規則:去除它的默認的樣式,同時將列表項的 float 屬性設置成 left ,以使它們以水平方式排列,然後列表項的 position 屬性設置成 relative,以便
後續能夠定位到其包含的彈出菜單:

強制使菜單中的鏈接以塊形元素的形式顯示,從而讓它們能夠填充菜單項所處的方形區域,在IE6(以及更早期的版本)中無法實現效果,但通過把鏈接的寬度設置成100%,也能確保可點擊的區域擴展到整個容器範圍。


接下來,將爲生成彈出菜單的內嵌列表添加樣式規則:使它們在默認情況下不會顯示 (display: none),而且在顯示時使用絕對定位模式,以確保它們不會影響文檔其他內容的頁面佈局。

爲了避免彈出菜單也以水平方式排列,所以需要將 float 屬性的值設置爲 none;
#nav ul li {
float: none;
}


最終,通過使用 :hover僞類使鼠標指針移動到菜單項時顯示出彈出菜單:

以上的代碼最初將把內嵌列表的 display 屬性設置爲 none ,當用戶將鼠標指針移到主菜單項上時,內嵌列表的 display 屬性就將被設置爲 block ,菜單也就將顯示出來。
但這種效果在IE6中是無法實現的,因爲在IE6瀏覽器中,:hover 僞類僅適用於鏈接,其他元素都不可用

其他的CSS代碼簡單地應用一些可視化樣式規則,對菜單的外觀提供了一些美化的效果。

注意:
當彈出菜單顯示出來時,用戶必須向下移動鼠標指針以選中彈出菜單中的某個菜單項,但執行這個操作時,鼠標指針將會從主菜單項上移開,因爲 :hover 僞類將不再生效。
看看頁面的樣式規則,我們就能發現在此使用了絕對定位模式來顯示內嵌列表,從而防止對頁面中的其他內容產生影響。
理論上我們應該在頂級菜單和彈出菜單之間留出一些空間,這些空間可以通過爲頂級菜單添加邊距(margin)的方法來實現。但在IE7中,當鼠標指針放在這個邊距範圍中時,彈出菜單也將消失。因此我們必須通過爲頂級菜單應用白色邊框(border)來實現這種空間。

我在每個列表項的頂部添加了一個非常小的邊距,其值和底部的負邊距相等。這將使菜單向下移動一個像素,恰好確保白色邊框不會覆蓋頂級菜單的底部。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>drop-down</title>
<link rel="stylesheet" type="text/css" href="menus.css" />
<script type="text/javascript">
	function addClass(li){
		li.className = 'hover';
	}
	
	function removeClass(li){
		li.className = '';
	}
</script>
</head>
<body> 
<ul id="nav">
	<li οnmοuseοver="addClass(this)" οnmοuseοut="removeClass(this)"><a href="#">Starters</a>
		<ul>
			<li><a href="">Fish</a></li>
			<li><a href="">Fruit</a></li>
			<li><a href="">Soups</a></li>
		</ul>
	</li>
	<li οnmοuseοver="addClass(this)" οnmοuseοut="removeClass(this)"><a href="#">Main courses</a>
		<ul>
			<li><a href="">Meat</a></li>
			<li><a href="">Fish</a></li>
			<li><a href="">Vegetarian</a></li>
		</ul>
	</li>
	<li οnmοuseοver="addClass(this)" οnmοuseοut="removeClass(this)"><a href="#">Desserts</a>
		<ul>
			<li><a href="">Fruit</a></li>
			<li><a href="">Puddings</a></li>
			<li><a href="">Ice Creams</a></li>
		</ul>
	</li>
</ul> 
</body>
</html>

@CHARSET "UTF-8";

body {
	font: 1em Verdana, Arial, sans-serif;
	background-color: #FFFFFF;
	color: #000000;
	margin: 1em 0 0 1em;
}

#nav, #nav ul {
	padding: 0;
	margin: 0;
	list-style: none;
}

#nav li {
	float: left;
	position: relative;
	width: 10em;
	border: 1px solid #B0C4DE;
	background-color: #E7EDF5;
	color: #2D486C;
	font-size: 80%;
	margin-right: 1em;
}

#nav a:link, #nav a:visited {
	display: block;
	text-decoration: none;
	padding-left: 1em;
	color: #2D486C;
}

* html #nav a {
	width: 100%;
}

#nav ul {
	display: none;
	position: absolute;
	padding: 0;
}

#nav ul li {
	border: 0 none transparent;
	border-bottom: 1px solid #E7EDF5;
	border-top: .5em solid #FFF;
	background-color: #F1F5F9;
	font-size: 100%;
	margin-bottom: -1px;
	margin-top: 1px;
	padding: 0;
}

#nav li.hover ul, #nav li:hover ul {
	display: block;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章