在前面提到的基本的水平导航(点击查看)的基础上,要求每个菜单项顶角是圆角。通过CSS样式设置难以实现,所以我们借助圆角的图片来实现这个效果。我们注意到菜单项有三种不同的颜色,按照常理应该需要三个不同的标签图片来创建菜单。但是如果把标签作为独立的图片,当页面最初加载到用户端浏览器时,不会加载全部的图片,只有当鼠标开始停留和点击导航标签时,图片才会被加载之后才会显示,这样的效果不好。
所以,可以将三种状态组合为一个图片(如下所示),这样,全部三个状态会同时加载,只要通过CSS的“背景—位置”属性来移动背景图片就可以选择所需要的状态。
参考之前为水平菜单创建的样式,为每个链接指定了宽度,因此各个状态的标签图片需要相同宽度。当图片被置于链接背景之中,只会显示能符合定义好的元素宽度和高度的那部分图片,余下部分保持隐藏状态。下面上代码:
1、HTML代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>Vertical Navigation</title>
<!--meta标记定义的字符集是支持中文的gb2312-->
<meta http-equiv=content-type content="text/html; charset=gb2312">
<!--链接外部CSS样式 -->
<link rel="stylesheet" href="fixed-tabs.css" type="text/css" media="screen" />
</head>
<body id="body_his"> <!--为body设置一个id属性,和导航的id关联起来以指出用户目前在浏览网站的哪个页面或哪个区 -->
<!--直接将导航项目包含在一个列表中,为排序列表和div一样属于块级别元素,所以直接将id赋予列表自身 -->
<ul id="nav">
<!--为列表的每个项目都设置唯一的id -->
<li id="nav_hom"><a href="/">Home</a></li>
<li id="nav_map"><a href="/maps/">Maps</a></li>
<li id="nav_jou"><a href="/journal/">Journal</a></li>
<li id="nav_his"><a href="/history/">History</a></li>
<li id="nav_ref"><a href="/references/">References</a></li>
<li id="nav_con"><a href="/contact/">Contact</a></li>
</ul>
</body>
</html>
2、CSS代码
/*CSS STYLE SHEET FOR [fixed-tabs.html]
Created by [Serein_Chan]
Email: [Serein_Chan@foxmail.com]
Author Blog:[http://blog.youkuaiyun.com/cxwen78]
*/
/*注释 */
/*由于导航字体可能会与页面其余字体相匹配,所以font-family在CSS较高的位置进行声明 */
html {
font: small/1.4 "Lucida Grande", Tahoma, sans-serif;
}
body {
font-size: 92%;
}
#nav {
margin: 0;
padding: 0;
background: #6F6146; /* 这个背景颜色跟正常标签图片的颜色相同*/
list-style-type: none;
width: 767px; /* 设置未排序列表元素的宽度 */
float: left; /* Contain floated list items */
}
#nav li {
margin: 0;
padding: 0;
float: left;
}
#nav a {
float: left;
width: 127px; /*设置每个导航项的宽度*/
color: #FFF;
text-decoration: none; /*定义标准的文本,链接文本没有下划线*/
line-height: 2.5;
text-align: center; /* 文字位于每个列表项的中间*/
border-right: 1px solid #FFF; /*只设置右边框*/
background: url(tab.gif) no-repeat; /* 添加粘合了三个状态的背景图片, */
}
#nav #nav_con a {
border: none;
}
#nav a:hover {
background-color: #4F4532; /*伪类hover设置停留时的背景颜色改变,并与平移后的图片颜色相同*/
background-position: -127px 0; /* -127,表示背景图片向左平移127px,实现状态的改变*/
}
/*将导航的id与body的id关联,为当前的访问的导航元素设置样式,以凸显浏览所在的“当前位置”*/
#body_hom #nav_hom a,
#body_map #nav_map a,
#body_jou #nav_jou a,
#body_his #nav_his a,
#body_ref #nav_ref a,
#body_con #nav_con a {
background-color: #BEB06F; /*这个背景颜色跟当前访问的标签图片的颜色相同*/
color: #1A1303; /*字体颜色接近黑色*/
font-weight: bold; /*字体加粗*/
background-position: -254px 0; /*表示背景图片向左平移254px,实现状态的改变*/
}
3、效果图