这是一组效果很酷的移动手机导航菜单UI设计效果。这组手机导航菜单设计共有6种不同的效果,均使用CSS3和少量的jQuery代码来完成。在用户点击汉堡包菜单按钮时,会以不同的方式来显示全屏的导航菜单。
使用方法
HTML结构
该手机导航菜单的基本HTML结构如下:其中div.iphone__screen
中的内容是导航菜单的内容。其它部分都是辅助元素,用于绘制手机的外观。
<div class="iphone style-1"> <div class="iphone__item">#1</div> <div class="iphone__power-btn"></div> <div class="iphone__left-btn"></div> <div class="iphone__details"></div> <div class="iphone__screen"> <a href="#" class="nav__trigger"><span class="nav__icon"></span></a> <nav class="nav"> <ul class="nav__list"> <li class="nav__item"><a class="nav__link" href="#">Home</a></li> <li class="nav__item"><a class="nav__link" href="#">About Us</a></li> <li class="nav__item"><a class="nav__link" href="#">Portfolio</a></li> <li class="nav__item"><a class="nav__link" href="#">Blog</a></li> <li class="nav__item"><a class="nav__link" href="#">Contact Us</a></li> </ul> </nav> <div class="iphone__content"></div> </div> <div class="iphone__home-btn"></div> </div>
CSS样式
汉堡包导航菜单按钮使用<span>
元素,以及它的:before
和:after
伪元素来制作。并且为它们的background-color
属性和transform
设置了300毫秒动画过渡效果。
.nav__trigger { display: block; position: absolute; width: 30px; height: 25px; right: 10px; top: 10px; z-index: 200; } .nav--active .nav__trigger { opacity: 0.5; } .nav__icon { display: inline-block; position: relative; width: 30px; height: 5px; background-color: #FFFFFF; -webkit-transition-property: background-color, -webkit-transform; transition-property: background-color, -webkit-transform; transition-property: background-color, transform; transition-property: background-color, transform, -webkit-transform; -webkit-transition-duration: 300ms; transition-duration: 300ms; } .nav__icon:before, .nav__icon:after { content: ''; display: block; width: 30px; height: 5px; position: absolute; background: #FFFFFF; -webkit-transition-property: margin, -webkit-transform; transition-property: margin, -webkit-transform; transition-property: margin, transform; transition-property: margin, transform, -webkit-transform; -webkit-transition-duration: 300ms; transition-duration: 300ms; } .nav__icon:before { margin-top: -10px; } .nav__icon:after { margin-top: 10px; }
全屏导航菜单的通用样式非常简单,开始时透明度设置为0,所有属性都设置了300毫秒的动画过渡效果。在菜单激活状态.nav--active
中,透明度被设置为1,并添加一个背景颜色。
.nav { position: absolute; z-index: 100; opacity: 0; -webkit-transition-property: all; transition-property: all; -webkit-transition-duration: 300ms; transition-duration: 300ms; } .nav--active .nav { opacity: 1; background-color: #333; } .nav__list { margin: 0; padding: 10px; } .nav__item { list-style-type: none; text-align: left; } .nav__link { font-size: 1.3em; text-transform: uppercase; text-decoration: none; color: #FFFFFF; opacity: 1; -webkit-transition: opacity 300ms ease-in-out; transition: opacity 300ms ease-in-out; }
在第一种导航菜单效果中,导航菜单开始时使用translateX(-100%)
函数移到手机屏幕之外。里面的导航项的透明度设置为0。
.style-1 .nav { -webkit-transform: translateX(-100%); transform: translateX(-100%); width: 100%; height: 100%; } .style-1 .nav__link { opacity: 0; -webkit-transition-delay: 500ms; transition-delay: 500ms; }
当用户点击了导航菜单按钮,导航菜单上被添加了.nav--active
的class类,此时导航菜单处于激活状态。菜单中的导航项的透明度被设置为1,整个菜单使用translateX(0)
移动回手机屏幕中间。同时汉堡包按钮的上下两条线(:before
和:after
伪元素)分别做顺时针和逆时针的45度旋转,并将中间的span
元素通过透明度为0使其不可见。
.style-1 .nav--active .nav__link { opacity: 1; } .style-1 .nav--active .nav { -webkit-transition: all 300ms ease-in-out; transition: all 300ms ease-in-out; -webkit-transform: translateX(0); transform: translateX(0); } .style-1 .nav--active .nav__icon { background: rgba(0, 0, 0, 0); } .style-1 .nav--active .nav__icon:before { margin-top: 0; -webkit-transform: rotate(45deg); transform: rotate(45deg); } .style-1 .nav--active .nav__icon:after { margin-top: 0; -webkit-transform: rotate(-45deg); transform: rotate(-45deg); }
其它的5种导航菜单效果请参考下载文件中的样式设置。
JavaScript
该导航菜单使用jQuery来在用户点击汉堡包按钮时为其父元素切换相应的class类。
$(function(){ $('.nav__trigger').on('click', function(e){ e.preventDefault(); $(this).parent().toggleClass('nav--active'); }); })