演示在本文后面 常见的 Accordion 菜单都是竖直为主,这次笔者要教各位写一个变形的横向 Accordion 式菜单,让我们的选单硬是跟其它人不一样。废话就不多写了,直接来看 HTML:以下是引用片段:
<body>
<div id="nav_container">
<div class="navend"></div>
<ul id="nav">
<li><a href=http://www.poluoluo.com class="abgne">破洛洛</a></li>
<li><a href="#" class="jelly">菜单</a></li>
<li><a href="#" class="jquery">jQuery</a></li>
<li><a href="#" class="intro">简介</a></li>
<li><a href="#" class="about">关于</a></li>
<li><a href="#" class="help">帮助</a></li>
</ul>
</div>
</body> 基本的选单一样都是用 ul 来做,但要注意的是那个 div.navend 区块,它是用来放置最右边边框图片用的,如果缺少了它会让选单看起来突然被截断了(因為我们每一个选单都有边框)。再来就看看 CSS 的部份:以下是代码片段:
#nav {
position: relative;
overflow: hidden;
list-style: none;
float: right;
width: 480px;
height: 30px;
margin: 0;
padding: 0;
}
.navend {
float: right;
background-image: url(end.gif);
width: 5px; /* end.gif 的宽 */
height: 30px; /* end.gif 的高 */
}
#nav li {
position: absolute;
overflow: hidden;
padding: 0;
margin: 0 ;
}
#nav li a {
text-indent: -9999px;
display: block;
width: 170px; /* 预设的宽 */
height: 30px; /* 图片的高 */
}
a.abgne {
background-image: url(nav1.gif);
}
a.jelly {
background-image: url(nav2.gif);
}
a.jquery {
background-image: url(nav3.gif);
}
a.intro {
background-image: url(nav4.gif);
}
a.about {
background-image: url(nav5.gif);
}
a.help {
background-image: url(nav6.gif);
}
这边要把 li 都设成 position: absolute;,这样我们才能控制它的 left 属性来做位置的移动。
笔者这边取 64px 是用来当图示 icon 用的,当选单被其它选单覆盖时,至少还能看到图示,等展开后才看到完整的内容。
不过我们选单位置预设都会是在 left: 0; 的位置,因此接下来整个部份就是靠 jQuery 来完成的:以下是代码片段:
$(function(){
// 初始化参数
var _navLi = $("#nav li"),
speed = 200, // 移动速度
maxWidth = 170, // 最大宽
minWidth = 64, // 最小宽
diffWidth = maxWidth - minWidth; _navLi.each(function(i){
var _this = $(this),
_prev = _this.prev(),
_left = !_prev.length ? 0 :(_prev.position().left + (i==1 ? maxWidth : minWidth));
// 先把每一个 li 的位置都放到定位
// 并把 left 值记录起来
_this.css("left", _left).data("left", _left);
}).mouseover(function(){
// 当滑鼠移到选项时, 把它后面选项都滑动回去
// 再把自己跟前面的选项都往前滑
$(this).nextAll().each(slideBack).end().prevAll().andSelf().each(function(){
var _this = $(this);
if(_navLi.index(_this)>0){
_this.stop().animate({
left: _this.data("left") - diffWidth
}, speed);
}
});
}); // 当滑鼠离开 #nav 时把选项都滑回原来位置
$("#nav").mouseleave(function(){
$("li", this).each(slideBack);
}); // 控制选项的滑动
function slideBack(){
var _this = $(this);
_this.stop().animate({
left: _this.data("left")
}, speed);
}
}); 加上 jQuery 后来看看效果吧:演示地址:http://www.poluoluo.com/example/jquery/1/test.html 转载请注明破洛洛
<body>
<div id="nav_container">
<div class="navend"></div>
<ul id="nav">
<li><a href=http://www.poluoluo.com class="abgne">破洛洛</a></li>
<li><a href="#" class="jelly">菜单</a></li>
<li><a href="#" class="jquery">jQuery</a></li>
<li><a href="#" class="intro">简介</a></li>
<li><a href="#" class="about">关于</a></li>
<li><a href="#" class="help">帮助</a></li>
</ul>
</div>
</body> 基本的选单一样都是用 ul 来做,但要注意的是那个 div.navend 区块,它是用来放置最右边边框图片用的,如果缺少了它会让选单看起来突然被截断了(因為我们每一个选单都有边框)。再来就看看 CSS 的部份:以下是代码片段:
#nav {
position: relative;
overflow: hidden;
list-style: none;
float: right;
width: 480px;
height: 30px;
margin: 0;
padding: 0;
}
.navend {
float: right;
background-image: url(end.gif);
width: 5px; /* end.gif 的宽 */
height: 30px; /* end.gif 的高 */
}
#nav li {
position: absolute;
overflow: hidden;
padding: 0;
margin: 0 ;
}
#nav li a {
text-indent: -9999px;
display: block;
width: 170px; /* 预设的宽 */
height: 30px; /* 图片的高 */
}
a.abgne {
background-image: url(nav1.gif);
}
a.jelly {
background-image: url(nav2.gif);
}
a.jquery {
background-image: url(nav3.gif);
}
a.intro {
background-image: url(nav4.gif);
}
a.about {
background-image: url(nav5.gif);
}
a.help {
background-image: url(nav6.gif);
}
这边要把 li 都设成 position: absolute;,这样我们才能控制它的 left 属性来做位置的移动。
笔者这边取 64px 是用来当图示 icon 用的,当选单被其它选单覆盖时,至少还能看到图示,等展开后才看到完整的内容。
不过我们选单位置预设都会是在 left: 0; 的位置,因此接下来整个部份就是靠 jQuery 来完成的:以下是代码片段:
$(function(){
// 初始化参数
var _navLi = $("#nav li"),
speed = 200, // 移动速度
maxWidth = 170, // 最大宽
minWidth = 64, // 最小宽
diffWidth = maxWidth - minWidth; _navLi.each(function(i){
var _this = $(this),
_prev = _this.prev(),
_left = !_prev.length ? 0 :(_prev.position().left + (i==1 ? maxWidth : minWidth));
// 先把每一个 li 的位置都放到定位
// 并把 left 值记录起来
_this.css("left", _left).data("left", _left);
}).mouseover(function(){
// 当滑鼠移到选项时, 把它后面选项都滑动回去
// 再把自己跟前面的选项都往前滑
$(this).nextAll().each(slideBack).end().prevAll().andSelf().each(function(){
var _this = $(this);
if(_navLi.index(_this)>0){
_this.stop().animate({
left: _this.data("left") - diffWidth
}, speed);
}
});
}); // 当滑鼠离开 #nav 时把选项都滑回原来位置
$("#nav").mouseleave(function(){
$("li", this).each(slideBack);
}); // 控制选项的滑动
function slideBack(){
var _this = $(this);
_this.stop().animate({
left: _this.data("left")
}, speed);
}
}); 加上 jQuery 后来看看效果吧:演示地址:http://www.poluoluo.com/example/jquery/1/test.html 转载请注明破洛洛
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货