スライドで見え隠れするエフェクトのついた二つのCSS縦メニュー
Two CSS vertical menu with show/hide effects
上記のサイトにて、縦並びになっているメニューが
JavaScriptとMootoolsを使って紹介されていたのですが、
サンプルのプレビューの画像が切れて表示されていたり、
横幅を画像と同じにしたいと思ったので、ソースを少しいじってみました。
そして、僕はMootoolsとjQueryの二つの方法で、
Web2.0風の縦メニューのshow/hideエフェクトをつけたので、
比較してみようと思います。
CSS
いきなりですが、変更後のCSSを書いておきます。body{font-family:Arial, Helvetica, sans-serif; font-size:13px;} /* ----------------------------------- */ /* BUTTON */ .button{ color:#FFFFFF; clear:both; display:block; font-size:13px; font-weight:bold; height:25px; width:198px; } a.button { text-decoration:none; } .button span { background:url(https://h2ham.up.seesaa.net/image/button.png) left top no-repeat; display:block; height:31px; line-height:31px; padding-left:10px; } /* ----------------------------------- */ /* MENU */ .v-menu{ border:solid 1px #7F9FBF; width:198px; } ul.v-menu, .v-menu li{ display:block; float:left; clear:left; padding:0; margin:0; list-style:none; } ul.v-menu{ clear:both; padding:6px 10px; width:176px; } .v-menu li a{ color:#555555; font-weight:bold; display:block; border-top:solid 1px #DEDEDE; padding:4px 0; text-decoration:none; } .v-menu li a:hover{ color:#999999; }
このCSS設定だと、クリックした後の画像を変更しません。
作っている最中に忘れていたのですが、ご了承ください。
主な変更(修正)点
主な変更点としては、スライドして出てくる部分のサイズを固定しました。ずれていても良かったのですが、同じにしたかったのです。
それと、背景に入れられていた画像も見えるようにしました。
widthを指定したくらいですけどね。
(この段階でクリック後の画像を消してしまったので、
背景画像の指定は消さない方がいいかもしれません。)
そして、スライドして出てくる部分がきちんと画像の下と
くっつくように少し高さを調節しました。
IEだとmargin-topが有効になってしまっていたので、 margin-topも削除しました。
リストの高さもそれぞれ同じにしようと思ったので、
floatとclearを指定しpaddingで同じ高さになるようにしました。
この二つを指定していないと、なぜか余白が多くとられてしまい、
表示がブラウザで同じにならなかったので、指定しました。
これで一応、同じサイズになっていると思います。
この指定で、横のサイズはボタンもスライドもあわせられます!
そしてボタンとスライドしてくるリストの境界も
くっつくようになっていると思います。
なにかバグがあればご報告お願いします。
jQueryとMootools
僕が主に利用しているのはjQueryなんですが、
プレビューにあったMootoolsも少しさわってみました。
ちょっとしかいじっていないので、なんとも言えないのですが、
ちょっとなれないと使いづらいのかもしれません。
ですが、MootoolsにはMootoolsのいい部分もあるようなので
用途によって使い分けるといいと思います。
jQueryで作ったときのソース
Mootoolsのソースはすでに出ているので省略します。<a href="#" class="button" id="toggle"> <span>Click Here</span> </a> <ul id="v-menu2" class="v-menu"> <li><a href="#">Technology</a></li> <li><a href="#">Design</a></li> <li><a href="#">Css Gallery</a></li> <li><a href="#">Entertainment</a></li> <li><a href="#">Programming</a></li> </ul>
CSSは上で書いたのを使います。
JqvaScriptの指定は以下の通り。
$(document).ready(function(){ $("#v-menu2").hide(); $("#toggle").click(function(){ $("#v-menu2").slideToggle("slow"); }); });
実はこれだと画像が変化しないので、一つ指定がたりないのですが、
スライド部分はコレだけでOK。
スライドする速度も指定できるし、
Mootoolsよりも指定が楽かなって思います。
プレビューはこちら
・jQuery
・Mootools
MootoolsとjQueryの明らかな違い
上のプレビューをみて気づいた。指定の違いからくるものかもしれませんが、
明らかに動作が違ったので紹介しておきます。
FirefoxのアドオンのFirebugで動きを見たところ、
こんな違いが出ていました。
jQuery
動作前
動作後
Mootools
動作前動作後
最初から違う二つ
HTMLもCSSも同じなのに、スクリプトでこんな風に変わるとは。jQueryはstyleの指定は増えるものの、特に変化がないのがわかる。
ところがMootoolsの方は、最初からulがdivで囲まれている。
そんな指定は一切していないのに、動作が最初から違うのだ!
この違いには驚いた。
なので、このエントリーの最初に書いたCSSでは、
Mootoolsのスライドの位置が右にある。
divが入ってしまっているからだろう
Mootoolsを使う際は、この違いに気をつけたほうがよさそうだ。
ってことでMootoolsのほうのCSSを少し変更した。
ボタンのほうのfloatの指定を削除しました。
・Mootools
やっぱり僕はjQueryの方が使いやすいなって感じたエントリーでした。
皆さんのサイトのエフェクトに、使ってみてはどうでしょう!