在网上经常可以看到一些效果非常酷的隐藏侧边栏菜单效果。隐藏侧边栏作为一种新的菜单布局方式已经被越来越多的人所接受,它给用户一种全新的体验。特别是在移动手机等小屏幕设备上,隐藏侧边栏就显得特别有用。它不会占用多余的空间,只有在需要的时候才显示出来。
隐藏侧边栏菜单经常被使用在移动手机和一些触摸屏设备上。隐藏侧边栏最大的好处是不占用空间,并且只使用少量的javascript和CSS就可以制作出一个隐藏侧边栏效果。
隐藏侧边栏菜单经常是以一个jQuery插件的形式出现,在这篇文章中,我们将使用CSS3 transition 和 animation以及少量的jQuery代码来制作一个效果非常酷的隐藏侧边栏特效。
HTML结构
隐藏侧边栏菜单的HTML结构和普通的菜单的HTML结构稍微有一点不同。我们要关注下面的是三元素:
- Container:这是整个页面的包裹容器,它会将隐藏侧边栏菜单和其它页面元素全部包裹起来。
- Canvas:这个
div
是包裹隐藏侧边栏和其它元素的二级容器。 - Navigation:这个
div
是隐藏侧边栏的包裹容器。
基本的HTML结构如下:
<div id="container"> <div id="canvas"> <div id="nav"> //Sliding Navigation Content Here </div> </div> </div>
下面是添加了菜单项和页面其它元素的代码:
<div id="container"> <div id="canvas"> <div id="nav"> <h2 id="title"><i class="fa fa-sitemap"></i> MENU</h2> <ul id="toggle"> <li> <div class="active border"> <span class="menu-icons fa fa-home"></span> <a href="#">HOME</a> </div> </li> <li> <div> <span class="menu-icons fa fa-user"></span> <a href="#">ABOUT US</a> <span class="the-btn fa fa-plus"></span> </div> <ul> <li> <a href="#">OUR TEAM</a> </li> <li> <a href="#">OUR SERVICES</a> </li> </ul> </li> <li> <div> <span class="menu-icons fa fa-briefcase"></span> <a href="#">PORTFOLIO</a><span class="the-btn fa fa-plus"></span> </div> <ul> <li> <a href="#">WEB DESIGN</a> </li> <li> <a href="#">GRAPHIC DESIGN</a> </li> </ul> </li> <li> <div> <span class="menu-icons fa fa-envelope"></span> <a href="#">CONTACT</a> </div> </li> </ul> </div> <a href="#" class="toggle-nav" id="bars"><i class="fa fa-bars"></i></a> <h1>Off Canvas Sliding Navigation</h1> <h3>Transition effect for off-canvas views with sliding navigation </h3> <p> <a href="#" class="back">← Back to the Article</a></p> </div> </div>
以下是一些要注意的事项:
div#nav
中包含了一个带ID#toggle
的无序列表。这个ID在后面用于侧边栏的选择和滑动效果。- 每个无序列表中都有一个
div
元素,在div
中包含了带font awesome图标的span
元素以及它们各自的超链接元素。 - 如果无序列表中又包含了一个无序列表,就添加一个(+)字体图标。在后面会使用jQuery来使菜单在展开时显示 (-)的字体图标。
- 带有class为
toggle-nav
的超链接元素是我们的汉堡包图标。后面会使用jQuery来使它隐藏和展开侧边栏菜单。
CSS样式
首先是设置一些通用样式:
html,body{background: #f3efe0;} h1, h2, h3{text-align: center;} h1{ font-family: 'Raleway', Arial, sans-serif; font-weight: 700; font-size: 45px; margin-top: 15px; color: #38935f; } h3{ font-family: 'Raleway', Arial, sans-serif; font-weight: 400; font-size: 25px; margin-top: 15px; color: #918e84; }
下面要给包裹容器一些样式。#container
设置为宽100%,孤独为100vh,100vh表示整个设备的高度,vh测量单位可以参考这里。同时超出画板的元素要隐藏起来。
#container { width: 100%; height: 100vh; position: relative; overflow: hidden; }
下面是#canvas
的样式。同样设置为100%宽度和100%高度,定位设置为相对定位方式。然后添加一些transition 和 transform样式,为后面的jQuery调用做准备。
#canvas { width: 100%; height: 100%; padding: 5.5% 0; position: relative; -webkit-transform:translateX(0); -moz-transform:translateX(0); -ms-transform:translateX(0); -o-transform:translateX(0); transform:translateX(0); -webkit-transition:.5s ease all; -moz-transition:.5s ease all; -o-transition:.5s ease all; transition:.5s ease all; }
接下来是#nav
元素。它使用绝对定位,离屏幕左侧-300px,这样初始时它是看不见的。同时添加一些transition 和一个旋转-90度的transform效果,通过这个设置来制作侧边栏在3D空间中旋转90度的平滑过渡效果。
#nav { width: 300px; height: 100%; background: #38935f; position: absolute; left: -300px; top: 0; -webkit-transition:.5s ease all; -moz-transition:.5s ease all; -o-transition:.5s ease all; transition:.5s ease all; /* By default, rotate the menu 90deg inwards */ -webkit-transform:rotateY(-90deg); -moz-transform:rotateY(-90deg); -ms-transform:rotateY(-90deg); -o-transform:rotateY(-90deg); transform:rotateY(-90deg); }
我们还需要一些样式来制作滑动侧边栏效果。下面的CSS样式包含显示列表父元素、隐藏子菜单、背景颜色、菜单图标和加号减号的字体图标的样式。这些样式将在后面用jQuery来管理。
#toggle { list-style: none; margin-top: 40px; } #toggle div:hover { background: rgba(0,0,0,0.2); -webkit-box-shadow:inset 0 -1px rgba(0,0,0,0); -moz-box-shadow:inset 0 -1px rgba(0,0,0,0); box-shadow:inset 0 -1px rgba(0,0,0,0); color: #fff; } #toggle div.active { background: #1f9d55; } #toggle div { cursor: pointer; display: block; border-bottom: 1px solid rgba(0,0,0,0.2); } span.menu-icons { font-size: 20px; height: 20px; width: 22px; float: left; margin: 11px 0px 10px 37px; color: #fff; } span.the-btn { float: right; font-size: 20px; height: 30px; width: 43px; margin-top: 10px; margin-right: 8px; padding:0; color: #fff; } #toggle ul { list-style: disc; display: none; color: #fff; background: rgba(0,0,0,0.2); -webkit-box-shadow:inset 0 -1px rgba(0,0,0,0); -moz-box-shadow:inset 0 -1px rgba(0,0,0,0); box-shadow:inset 0 -1px rgba(0,0,0,0); } #toggle li a { line-height: 41px; color: #fff; list-style: circle; width: 240px; padding: 0; margin: 0 0 0 50px; } #toggle a { margin: 0 0 0 47px; padding: 0; font-family: 'Lato'; color: #fff; line-height: 41px; font-weight: normal; font-size: 18px; text-decoration: none; } #toggle ul li { margin-left: 109px; } #toggle ul li a:hover{ background: #1f9d55; } #toggle ul li a { margin-left: 0; }
最后是制作菜单的动画效果。我们使用transform属性,在display-nav
class上使菜单在3D空间中平滑过渡。这其实就是一个3D翻转动画效果。
#nav { width: 300px; height: 100%; background: #38935f; position: absolute; left: -300px; top: 0; -webkit-transition:.5s ease all; -moz-transition:.5s ease all; -o-transition:.5s ease all; transition:.5s ease all; /* By default, rotate the menu 90deg inwards */ -webkit-transform:rotateY(-90deg); -moz-transform:rotateY(-90deg); -ms-transform:rotateY(-90deg); -o-transform:rotateY(-90deg); transform:rotateY(-90deg); } #container.display-nav #canvas { -webkit-transform:translateX(300px); -moz-transform:translateX(300px); -ms-transform:translateX(300px); -o-transform:translateX(300px); transform:translateX(300px); } /* transition the menu with perspective on "show-nav" */ #container.display-nav #nav { -webkit-transform-origin:100% 50%; -moz-transform-origin:100% 50%; -ms-transform-origin:100% 50%; -o-transform-origin:100% 50%; transform-origin:100% 50%; -webkit-transform:perspective(600px) rotateY(0deg); -moz-transform:perspective(600px) rotateY(0deg); -ms-transform:perspective(600px) rotateY(0deg); -o-transform:perspective(600px) rotateY(0deg); transform:perspective(600px) rotateY(0deg); }
JAVASCRIPT
jQuery代码使用来隐藏和展开侧边栏菜单,这通过toggle-nav
class来实现。而具体的隐藏和显示又是通过display-nav
class来实现。代码中创建了一个函数用于专门显示和隐藏侧边栏:toggleNavigation
。
// Calling the function $(function() { $('.toggle-nav').click(function() { toggleNavigation(); }); }); // The toggleNav function itself function toggleNavigation() { if ($('#container').hasClass('display-nav')) { // Close Nav $('#container').removeClass('display-nav'); } else { // Open Nav $('#container').addClass('display-nav'); } }
现在我们已经制作出了隐藏侧边栏和它的滑动效果。在jQuery代码中创建了一个变量来引用当前的字体图标元素。
$currIcon=$(this).find(“span.the-btn”)
然后将侧边栏子菜单的中有二级子菜单的都将图标状态改变它为(+)。接着使用toggle
class来切换存储在$currIcon
中的 (+)或(-)字体图标符号。
// SLiding codes $("#toggle > li > div").click(function () { if (false == $(this).next().is(':visible')) { $('#toggle ul').slideUp(); } var $currIcon=$(this).find("span.the-btn"); $("span.the-btn").not($currIcon).addClass('fa-plus').removeClass('fa-minus'); $currIcon.toggleClass('fa-minus fa-plus'); $(this).next().slideToggle(); $("#toggle > li > div").removeClass("active"); $(this).addClass('active'); });
小结
到此我们就成功的制作出一个效果非常酷的隐藏侧边栏特效。你可以发挥想象制作出更酷的效果。希望这篇文章对你有所帮助。