利用CSS3特性生成菜单动画

工作需要在网站移动端的菜单more从三条横线,展开时变成X,利用动画实现。

HTML代码

1
2
3
4
5
<div class="menu-wrap close">
<div class="menu-line menu-line-top"></div>
<div class="menu-line menu-line-middle"></div>
<div class="menu-line menu-line-bottom"></div>
</div>

可以看到有一个wrap类作为父div,里面包含三条横线,默认菜单是open状态,点击可以展开菜单。

点击时,会将open类替换成close类,此时中间线隐藏,上下两条线进行旋转,成X,点击进行关闭。

SCSS样式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.menu-wrap {
margin:50px;
.menu-line{
width:40px;
height:5px;
background-color:#777;
margin:5px 0;
transition:1s;
tranform-origin:50% 50%;
}
}
.close {
.menu-line{
&-top{
transform:rotate(45deg) translate(0,14px);
}
&-middle {
opacity:0;
}
&-bottom {
transform:rotate(-45deg) translate(0,-14px);
}
}
}

JS代码

1
2
3
4
5
6
7
$('.menu-wrap').on('click',function(e){
if($(this).hasClass('open')) {
$(this).attr('class','menu-wrap close');
}else{
$(this).attr('class','menu-wrap open');
}
});

最终效果如下:
http://codepen.io/fiona2016/pen/yMdjXM

See the Pen menu-collapase by Fiona (@fiona2016) on CodePen.