このページの本文へ

前へ 1 2 3 次へ

  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

Web制作の現場で使えるjQuery UIデザイン入門 ― 第14回

jQueryでアコーディオンパネルUIを自作する

2009年10月09日 13時00分更新

文● 西畑一馬/to-R

※この記事は「Web制作の現場で使えるjQuery UIデザイン入門」の第14回です。過去の記事もご覧ください。


 「アコーディオンパネル」は、ラベルをクリックすると隠れていたパネル(ラベルの内容が書かれた部分)が、スライドしながら表示されるUIです。ポータルサイトのように、情報量に対して表示できるスペースが少ない場合などに重宝します。今回は、jQueryを使ったアコーディオンパネルの作成方法を紹介します。

今回制作するサンプル

サンプル画面
「アコーディオンパネル UI」の完成画面。ラベル部分をクリックすると、下に隠れていたパネルが表示される(画像クリックでサンプルページを表示します)


シンプルなアコーディオンを作ってみよう

 アコーディオンの基本動作から作ります。HTML/XHTML(以下、HTML)は次のとおりで、ラベル部分をdt要素、パネル部分をdd要素で記述する定義型リストで設定します。

サンプル01(HTML部分)


<dl>
    <dt>Step.1</dt>
    <dd><p>Lorem ...(中略)... venenatis.</p></dd>
    <dt>Step.2</dt>
    <dd><p>Integer ...(中略)... accumsan. </p></dd>
    <dt>Step.3</dt>
    <dd><p>Integer ...(中略)... imperdiet. </p></dd>
</dl>


 デザインはCSSで整えます。注意点は、パネルを設定しているdd要素にpaddingとmarginを設定しないことです。パネル開閉のアニメーションではdd要素のCSSプロパティを変更するため、paddingやmarginを設定しているとパネル内の文字の位置がずれてしまいます。余白を取りたい場合は、dd要素の内側の要素(p要素)にpaddingやmarginを設定しましょう。

サンプル01(CSS部分)


dl{
    width:800px;
}
dt{
    line-height:35px;
    font-size:large;
    text-indent:3em;
    font-weight:bold;
    color:white;
    height:35px;
    background:url("images/background.jpg")
}
dd{
    margin:0;
    height:300px;
    background:#D4D0C8;
}
dd p{
    margin:0;
    text-indent:1em;
    padding:20px;
}


 スクリプト部分は次のようになります。

サンプル01(スクリプト部分)


$(function(){
    $("dd:not(:first)").css("display","none");
    $("dl dt").click(function(){
        if($("+dd",this).css("display")=="none"){
            $("dd").slideUp("slow");
            $("+dd",this).slideDown("slow");
        }
    });
})


 1行ずつ分解して処理の内容を見ていきましょう。最初の命令(2行目)では、アコーディオンの初期表示状態を設定しています。HTMLとCSSの設定だけでは、すべてのパネル部分が展開した状態になっていますので、css()で1番目以外のdd要素を非表示にします(displayプロパティの値をnoneに変更)。


$("dd:not(:first)").css("display","none");


初期状態はすべてのパネルが表示されているので(左)、最初のパネル以外は非表示にする(右)
初期状態はすべてのパネルが表示されているので(左)、最初のパネル以外は非表示にする(右)

 次の行では、click()を使って、ラベル(dt要素)がクリックされた際のイベント処理を設定します(関連記事)。


$("dl dt").click(function(){


 if文(関連記事)を使って、以降の処理が実行される条件を設定します。条件は、クリックされた要素の次に登場するdd要素のdisplayプロパティが「none」の場合です。つまり、クリックさえたラベルに対応するパネル部分が非表示の場合にのみ、イベントの処理を実行します。「次の要素」は、隣接セレクター(関連記事)で特定できます。


if($("+dd",this).css("display")=="none"){


 5~6行目はアコーディオンの実際の動きを作る部分です。まず、すべてのdd要素に対してslideUpを適用します。slideUpは、表示されている要素をスライドさせながら非表示にする命令ですので(関連記事)、現在開いているパネルが滑らかに閉じます。


$("dd").slideUp("slow");


 最後に、隣接セレクターを利用し、クリックされたラベルのパネルをスライドアニメーションで表示します。スライドアニメーション付きで要素を表示する命令は slideDown() です。


$("+dd",this).slideDown("slow");


 以上で、パネルの表示/非表示をスライドアニメーション付きで切り換えるアコーディオンの完成です。


サンプル01(実行結果)

サンプル01
サンプル01
サンプル01の実行画面。ラベルをクリックされると現在開いているパネルが非表示になり、クリックされたラベルのパネルが表示される

【実務でハマる落とし穴】

“JavaScriptオフ”を考慮したUIデザインを

 今回作成したアコーディオンパネルは、初期表示の状態(1番目のパネル以外を非表示にする)をjQueryで設定しています。

 3つのパネルのうち1つを表示する初期状態にするなら、CSSでも設定できます。しかし、CSSでdisplay:noneを指定して非表示にすると、JavaScriptオフの環境では非表示の2つのパネルを表示できなくなってしまいます。JavaScriptで非表示にすれば、JavaScriptが利用できる環境では3つのパネルのうちの1つが表示され、JavaScriptが利用できない環境では、表示の切り替えはできませんが3つのパネルとも展開された状態になります。

 jQueryを含むJavaScriptを利用してUIを作成する際には、JavaScriptオフの環境への気配りを忘れないようにしましょう。

前へ 1 2 3 次へ

Get Microsoft Silverlight

関連記事

はてブ注目ランキング
  1. Google、リッチスニペットでイベントの日時や場所表示に対応15 users
  2. 大手に負けないネットショップの作り方12 users
  3. JavaScriptでRSSからPhotoshop画像を生成!9 users
  4. Adobe BridgeのJavaScriptでXMLを操作しよう8 users
  5. Google、中国から撤退か Google.cn 閉鎖の可能性も7 users
  6. もう配色には困らない!「Adobe Kuler」1456 users
  7. 30分でできる!Webサイトを高速化する6大原則1231 users
  8. Web制作会社が作った!超使えるJavaScriptライブラリ1044 users
  9. 黒船Google汐留沖に出現でWeb広告業界に激震!975 users
  10. Web制作に超便利!無料のプロトタイプ作成ツール777 users
最新記事

特設サイト

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

Web Professional 連載記事一覧

Norton Internet Security 2010

Norton Internet Security 2010

シマンテック

5278円~

36%OFF!!

ソースネクスト 筆王ZERO (2010年パッケージ) (Amazon.co.jp購入者対象:その場で200円割引き)

ソースネクスト 筆王ZERO (2010年パッケージ) (Am…

ソースネクスト

3672円~

26%OFF!!

筆まめVer.20 通常版DVD-ROM

筆まめVer.20 通常版DVD-ROM

クレオ

4432円~

31%OFF!!

大航海時代 Online ~El Oriente~

大航海時代 Online ~El Oriente~

コーエー

4645円~

24%OFF!!

Norton Internet Security 2010 ニコニコパック

Norton Internet Security 2010 ニ…

シマンテック

5180円~

37%OFF!!

Adobe Photoshop Elements 8 日本語版 Windows版

Adobe Photoshop Elements 8 日本語版…

アドビシステムズ

1万1340円~

22%OFF!!

PowerDirector 8 Ultra 特別優待パッケージ版

PowerDirector 8 Ultra 特別優待パッケージ版

サイバーリンク トランスデジタル

5832円~

43%OFF!!

楽々はがき2010 開運年賀状

楽々はがき2010 開運年賀状

ジャストシステム

1692円~

19%OFF!!

Amazon.co.jp