jQueryでタブメニューを作るの巻

JavaScriptのライブラリであるjQueryを用いたタブメニューを作ろうと思うが、
何故かどこを回ってもtab.UIと言う外部プラグインを使ったものしかない……
画像を使うとか、そんな重そうな物ばかり……
無いのなら、作ってしまえホトトギスと言うことで、簡易タブメニューを作成した。

サンプル

使用しているのはインラインのjquery命令と、外部CSSである。
ちなみに対象部のHTMLはこれ


<ul id="tab_list">
 <li id="p_tab">personal</li>
 <li id="d_tab">diary</li>
 <li id="b_tab">bookmark</li>
</ul>
<div id="personal" class="tab_body">中身1</div>
<div id="rss" class="tab_body">中身2</div>
<div id="bookmark" class="tab_body">中身3</div>

ulの中のliがタブのメニューになる。
その下のdivタグで囲まれた3つがタブの中身である。
それをCSSでこう味付けする(firefoxとsafariで角丸に見える部分は排除)。


#tab_list{
 line-height:1em;
 margin:0;
 margin-left:1em;
 margin-bottom:1px;
 position:relative;
 z-index:0;
}

タブの縦の長さを1文字分にして左と下を少し開け位置を相対位置にする。
下を1pxあけないとタブが本文部分に食い込んでしまうので要注意。
Firefox3.xのみ1pxあけてもまだ食い込んでいるので、位置表示を相対化する。


#tab_list li{
 display:inline;
 background-color:white;
 padding:0 4px;
 margin:0 0.1em;
}

リスト要素をインライン化し、背景を白塗りにした後、要素の左右を4pxずつ空ける
左右をあけない場合はpaddingを指定しないこと。
また、要素内が一杯に見えないよう左右を0.1文字ずつ広げておく。
この辺は好みで行ってください。


ul li#d_tab{background-color:#aabbff;}
ul li#b_tab{background-color:#aabbff;}

選択されていない2つのタブの色を変え、選択されていないことが分かるようにする
この辺の色もタブの色に合わせて適宜変更してください。


.tab_body{
 background-color:white;
 padding:10px;
 position:relative;
 z-index:1;
}

タブ本体の背景色を設定して相対表示にした後、
タブ自身より前に表示されるようにZ軸の指定を行う
(Firefox3.xでの食い込み対策)


#rss{display:none;}
#bookmark{display:none;}

選択されていないブロック要素を非表示にする。
ここまでで選択できないタブメニューと一つの要素の表示は完成です。
外見だけならタブメニューっぽく見えるようになりました。
後は、jQueryを使って料理していきます。


<script type="text/javascript">
$(function(){
 $("#p_tab").click(function (){
  $("#p_tab").css("background-color","white");
  $("#d_tab").css("background-color","#aabbff");
  $("#b_tab").css("background-color","#aabbff");
  $("#personal").css("display","block");
  $("#rss").css("display","none");
  $("#bookmark").css("display","none");
 });
});
</script>

タブ一つ分の命令です。
$(”#p_tab”).click(function ()で
idがp_tabの要素がクリックされた場合に動くようになっています。
$(”#p_tab”).css(”background-color”,”white”);でp_tabの背景を白に
$(”#d_tab”).css(”background-color”,”#aabbff”);と
$(”#b_tab”).css(”background-color”,”#aabbff”);で
残りのタブの背景を非選択色に変更しています。
$(”#personal”).css(”display”,”block”);でidがpersonal要素を表示
$(”#rss”).css(”display”,”none”);と
$(”#bookmark”).css(”display”,”none”);は
その他の要素を非表示にしています。

これを残りのタブ要素にも適用することで完成です。

<script type="text/javascript">
$(function(){
 $("#p_tab").click(function (){
  $("#p_tab").css("background-color","white");
  $("#d_tab").css("background-color","#aabbff");
  $("#b_tab").css("background-color","#aabbff");
  $("#personal").css("display","block");
  $("#rss").css("display","none");
  $("#bookmark").css("display","none");
 });
 $("#d_tab").click(function (){
  $("#p_tab").css("background-color","#aabbff");
  $("#d_tab").css("background-color","white");
  $("#b_tab").css("background-color","#aabbff");
  $("#personal").css("display","none");
  $("#rss").css("display","block");
  $("#bookmark").css("display","none");
 });
 $("#b_tab").click(function (){
  $("#p_tab").css("background-color","#aabbff");
  $("#d_tab").css("background-color","#aabbff");
  $("#b_tab").css("background-color","white");
  $("#personal").css("display","none");
  $("#rss").css("display","none");
  $("#bookmark").css("display","block");
 });
});
</script>

タブメニューと言っていますが、実質は最初に全ての要素を読み込んで、
選択していない物を非表示にしてタブの色を変更しています。
タブが選択されることでタブの色の変更を行い、
同時に選択された要素のブロックを表示、
選択されていない要素を非表示にしています。

一番苦労したのはFirefoxの挙動が変なことでCSSでの対策……
なんで2.xできつちり動いていたのを3.xで変にするかなあ

下記環境で確認しました
WinXP + IE7.0・WinXP+Firefox3.0・MacOSX + Safari
ちなみに、Firefox2.xでは1px離れて見えますが、古いブラウザなので無視><


Web | コメント (0) | 2008-07-13 |

IE7.js

毎度おなじみのことではあるが、
INTERNET EXPLORERことIE7.xのCSS対応がクズ以下ということで、
今さっきIEで確認したらトップページががたがたorz

M$はしね!! とか言っていても仕方ないので対策を考える
はうっ! これがあった!!

というわけで、IE7.js

http://code.google.com/p/ie7-js/

これを適用することによって、ゴミみたいな対応度のCSS対応状況を
限りなくW3C勧告レベルに引き上げるというモノ
これをIE独自仕様のコメント内演算子でIE7以下にのみ読み込ませる
(のでその他のブラウザはIEより軽くなる、いや、IEが重くなるのか)

そんな仕様入れる暇あるならCSSにまともに対応させろよ
IE7.jsの開発者は神! ということで

追記
しかし、ここまで完璧に直るとは思わなかった。


Web | コメント (0) | 2008-03-02 |

結局俺は

勝負できない組

昨日ね、夢を見たんです。夢
毎度おなじみRNNKで遊んでいたら、何故か会社の同僚が
「あ、良いところに。女の子紹介するから待ってなはれ」
といってくる。そう、無論逃げた。
…やっぱりリアルの(ry

data解析のページを移動AJAX的に
SoftSales Analyze - Nintendo NEXUS


Web, | コメント (0) | 2008-01-27 |

エヌログ大幅改造

サイドメニューを共通phpファイルから取得
一番下のOtherMenuにマウスを持ってくると…
jQueryって凄いよね〜

ちなみにモダンブラウザだと、OtherMenuが角丸表示に
メニューの1個に見えるようにしてあります。


Web | コメント (0) | 2008-01-27 |

PHP的に

なんとか、リンクをテーブルで吐かせることに成功
javaScriptだと5分で出来るのに、もろもろっと困惑。

まぁ、タグのミスなんだけどね。


Web | コメント (0) | 2008-01-18 |

Nintendo NEXUS
任天堂大辞典
Categories
TagCloud
Nlog Search
Nlog Archives
Meta
- Nintendo NEXUS Powered by WordPress -