今天,因为需要手风琴效果的菜单,搜索了一下,比较不错的都是一些前端框架的一部分,只为了使用手风琴效果而引入新的框架确实有点不合算,所以决定自己写个手风琴效果的菜单。
这个手风琴效果理论上是支持无限分层的,但是实际应用以二道三层为宜。因为写的时间很短,而且很困,所以可能还有一些问题,但是大致效果还是有的。记录下来,可以给大家写手风琴效果提供个思路,也可以留作以后优化,欢迎大家指正存在的问题。
下面是全部的css html js代码,用到的jquery大家可以自行下载,对于版本没什么要求,只要放到相应的路径即可。
菜单的效果如下:
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
/*
手风琴效果
*/
.listboder {
border: 1px solid #d0d0d0;
border-top: none;
}
.list {
display:none;
list-style: none;
background-color: #ffffff;
padding: 0px;
}
.list .item {
background:#F0F0F0;
font-size: 14px;
border-top: 1px solid #d0d0d0;
}
.list .active{
background: #d0d0d0;
}
.list .item .title{
width: 100%;
}
.list .item .title:hover {
background-color: #BEBEBE;
}
.list .item span {
display: inline-block;
padding-top: 10px;
padding-bottom: 10px;
}
.list .item i {
float: right;
margin-top: 10px;
margin-right: 20px;
}
.lp15 {
padding-left: 15px;
}
.lp30 {
padding-left: 30px;
}
.lp45 {
padding-left: 45px;
}
.lp60 {
padding-left: 60px;
}
.icon-chevron-down{
transform:rotate(90deg);
-ms-transform:rotate(90deg); /* IE 9 */
-moz-transform:rotate(90deg); /* Firefox */
-webkit-transform:rotate(90deg); /* Safari 和 Chrome */
-o-transform:rotate(90deg);
}
</style>
</head>
<body>
<div style="width:320px; margin-left: 10px;">
<ul class="list listboder" style="display: block;">
<li class="item">
<div class="title">
<span class="lp15">数据库</span>
<i class="iconfont">»</i>
</div>
<ul class="list">
<li class="item">
<div class="title">
<span class="lp30">mysql</span>
<i class="iconfont">»</i>
</div>
<ul class="list">
<li class="item">
<div class="title">
<span class="lp45">schema</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">table</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">column</span>
<div>
</li>
</ul>
</li>
<li class="item">
<div class="title">
<span class="lp30">oracle</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp30">redis</span>
</div>
</li>
</ul>
</li>
<li class="item">
<div class="title">
<span class="lp15">java</span>
<i class="iconfont">»</i>
</div>
<ul class="list">
<li class="item">
<div class="title">
<span class="lp45">泛型</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">多线程</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">JVM</span>
</div>
</li>
</ul>
</li>
<li class="item">
<div class="title">
<span class="lp15">前端</span>
<i class="iconfont">»</i>
</div>
<ul class="list">
<li class="item">
<div class="title">
<span class="lp45">html</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">css</span>
</div>
</li>
<li class="item">
<div class="title">
<span class="lp45">js</span>
</div>
</li>
</ul>
</li>
</ul>
</div>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(function(){
$('.item').click(function(event){
_$this = $(this);
//如果没有下级元素那么就执行别的方法
if(_$this.children('.list').length==0) {
return false;
}
//如果当前元素处于展开的状态,那么仅仅关闭当前层
if(!(_$this.children('.list').is(':hidden'))){
_$this.children('.list').hide();
_$this.find('i').first().removeClass('icon-chevron-down');
_$this.removeClass('active');
return false;
}
//先关闭同级的展开的菜单
var _$childen = _$this.parent().children('.item');
_$childen.children('.list').hide();
_$childen.children('.title').children('i').removeClass('icon-chevron-down');
_$childen.removeClass('active');
_$this.children('.list').show();
_$this.find('i').first().addClass('icon-chevron-down');
_$this.addClass('active');
//阻止事件向上冒泡
event.stopPropagation();
});
})
</script>
</body>
</html>