テキストを表示する
HTMLは普通にリストを2重にしてます。
HTML
<div id="global-nav"> <ul id="global-nav-btn"> <li><a href="#">Home</a></li> <li> <a href="#">Navi01</a> <ul> <li><a href="#">Navi01 A</a></li> <li><a href="#">Navi01 B</a></li> </ul> </li> <li> <a href="#">Navi02</a> <ul> <li><a href="#">Navi02 A</a></li> <li><a href="#">Navi02 B</a></li> <li><a href="#">Navi02 C</a></li> <li><a href="#">Navi02 D</a></li> </ul> </li> </ul> </div>
CSS
#global-nav ul { list-style: none; } #global-nav-btn { margin: 0 auto; padding: 0; color: #fff; width: 980px; } #global-nav-btn a { display: block; color: #fff; text-decoration: none; padding: 10px; } #global-nav-btn a:hover { background: #434343; } #global-nav-btn>li { float: left; position: relative; margin: 0; width: 200px; display: block; cursor: pointer; } #global-nav-btn>li>a { padding: 15px 10px; } #global-nav-btn>li>ul { position: absolute; padding: 0; top: -300px; z-index: -1; } #global-nav-btn>li>ul>li a { display: block; color: #fff; background-color: #333; width: 200px; }
JavaScriptの方はjQueryを使用しています。
JavaScript
(function($) { $(function() { var $gnav = $('#global-nav-btn>li'); var navHeight = []; $gnav.each(function(){ navHeight.push($('ul', this).height()); }); // 高さを取得 for (var i=0; i<navHeight.length; i++) { if(navHeight[i]) { $gnav.eq(i).find('ul').css({ 'top': -navHeight[i] + 'px' }); } } $gnav.hover( function(){ var index = $(this).index(); if(navHeight[index]) { dynamics.animate($('ul', this)[0], { top: 45 }, { type: dynamics.gravity, duration: 800, elasticity: 200 }); } }, function() { var index = $(this).index(); if(navHeight[index]) { dynamics.animate($('ul', this)[0], { top: -navHeight[index] }, { type: dynamics.linear, duration: 300 }); } } ); }); })(jQuery);
オプションで「dynamics.gravity」で重力っぽい動きになるので、色々変えてみると面白いとおもいます。
Dynamics.js