かっこいいナビゲーション

Large Drop Down Menu Demoというのを見つけた。かっこいい。
これをdesktop、mobile、print用のデザインにも応用させたい。
(注意:最後には挫けています。) 

簡単な分析

自分用のメモ、他人への理解は気にしない。

<body> 
<h1>さんぷる</h1> 
<div class="box"> 
<h2>おおきな摘んで落とす項目なり</h2> 
<ul id="ldd_menu" class="ldd_menu"> 
<li> 
<span>常に表示される</span><!-- Increases to 510px in width--> 
<div class="ldd_submenu"> 
<ul> 
<li class="ldd_heading">一つ目</li> 
<li><a href="#">ああああ</a></li> 
<li><a href="#">いいいい</a></li> 
<li><a href="#">うううう</a></li> 
<li><a href="#">ええええ</a></li> 
<li><a href="#">おおおお</a></li> 
</ul> 
<ul> 
<li class="ldd_heading">二つ目</li> 
<li><a href="#">かかかか</a></li> 
<li><a href="#">きききき</a></li> 
<li><a href="#">くくくく</a></li> 
<li><a href="#">けけけけ</a></li> 
<li><a href="#">ここここ</a></li> 
</ul> 
※閉じるタグを適宜

<!-- The JavaScript --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
<script type="text/javascript"> 
$(function() {
/**
* the menu
*/
var $menu = $('#ldd_menu');

/**
* for each list element,
* we show the submenu when hovering and
* expand the span element (title) to 510px
*/
$menu.children('li').each(function(){
var $this = $(this);
var $span = $this.children('span');
$span.data('width',$span.width());

$this.bind('mouseenter',function(){
$menu.find('.ldd_submenu').stop(true,true).hide();
$span.stop().animate({'width':'510px'},300,function(){
$this.find('.ldd_submenu').slideDown(300);
});
}).bind('mouseleave',function(){
$this.find('.ldd_submenu').stop(true,true).hide();
$span.stop().animate({'width':$span.data('width')+'px'},300);
});
});
});
</script>	

ここからが、魔改造なところ。
headerに記述する「スタイルシート切替」に応じて、こっちの表示も切り替えたい。

  • style_desktop:このビュー
  • style_mobile:スクリプトの動作なし、画面最下部で全て表示
  • style_print:画面に表示しない

どうしよう?
Switch stylesheets with jQueryと組み合わせ方を考え中・・・
 

結果

jQueryの挙動に悩むので止める。「動作なし」が出来なかった・・・
 

次の手

Create a cool CSS-based drop-down menuというCSSだけで動作するプルダウンメニューを見つける。CSS切替でも活躍するだろうと考えて実装中・・・