第5回 サンプルで学ぶjQuery Mobileまとめ(前編)

jQuery Mobileにはこれまで紹介した以外にもさまざまな機能があります。サンプルの作成を通じて紹介した基本的な使い方をおさらいしつつ、そのほかの機能も併せてまとめておきましょう。

ページの作成

 jQuery Mobileでは、1つのHTMLに複数のページのコンテンツをまとめて記述します。ページの区切りやページ内のレイアウトは、カスタムデータ属性のdata-role属性で定義します。

ページの作成 data-role="page"

 div要素などにdata-role属性「page」を指定すると、HTML内にページを作成できます。data-role="page"を指定した要素には他と重複しないページIDを付け、id属性に記述します。

ヘッダーの表示 data-role="header"

 ページ内にdata-role属性「header」を指定した要素を配置すると、ヘッダーが表示されます。ヘッダー内はh1〜h6要素で包んだテキストがセンタリングして表示されます。

コンテンツの表示 data-role="content"

 ページ内にdata-role属性「content」を指定した要素を配置すると、コンテンツ領域として表示されます。

フッターの表示 data-role="footer"

ページ内にdata-role属性「footer」を指定した要素を配置すると、フッターが表示されます。フッター内はh1〜h6要素で包んだテキストがセンタリングして表示されます。

 jQuery Mobileではこれら4つを組み合わせることで、最小構成のページを作成できます(サンプル1)。

サンプル1[HTML]


<div data-role="page" id="ページID"> 
  <div data-role="header"><h1>ヘッダー</h1></div>
  <div data-role="content">コンテンツ</div>
  <div data-role="content"><h4>フッター</h4></div>
</div>


<画像>01.jpg
jQuery Mobileにより作成されたページ

 jQuery Mobileのページは、1つのHTML内に複数記述できます。サンプル2では、「#page1」というページと「#page2」というページを作成しています。

サンプル2[HTML]


<div data-role="page" id="page1"> 
  <div data-role="header"><h1>ページ1</h1></div> 
  <div data-role="content">コンテンツ1</div> 
  <div data-role="footer"><h4>フッター1</h4></div> 
</div>
<div data-role="page" id="page2"> 
  <div data-role="header"><h1>ページ2</h1></div> 
  <div data-role="content">コンテンツ2</div> 
  <div data-role="footer"><h4>フッター2</h4></div> 
</div>


 サンプル2をブラウザーで確認すると、HTML内に最初に記述しているページ(#page1)の内容だけが表示されます。他のページを表示するには、sample02.html#page2といった具合にURLの後ろにページIDを付けてアクセスする必要があります。

 各ページへリンクを張るには、a要素のhref属性にページIDを記述します。

サンプル3[HTML]


<a href="#page2">ページ2</a>


<画像>02-01.jpg,02-02.jpg
リンクをタップ(クリック)するとページが切り替わる

 jQuery Mobileではページ遷移時にアニメーションしながら表示が切り替わります。アニメーションの制御については後ほど解説します。

ダイアログ表示 data-rel="dialog"

 jQuery Mobileの特殊なページとして、ダイアログがあります。ページへのリンクに対してdata-rel属性「dialog」を指定すると、リンク先のコンテンツがページ上に浮いているようにして表示されます。

サンプル4[HTML]


<div data-role="page" id="page1"> 
  <div data-role="header"><h1>ページ1</h1></div> 
  <div data-role="content">コンテンツ1<br>
    <a href="#page2" data-rel="dialog">ダイアログ</a>
  </div>
  <div data-role="footer"><h4>フッター1</h4></div> 
</div>
<div data-role="page" id="page2"> 
  <div data-role="header"><h1>ダイアログ</h1></div> 
  <div data-role="content">ダイアログの内容</div> 
  <div data-role="footer"><h4>フッター</h4></div> 
</div>


<画像>03.jpg
jQuery Mobileのダイアログページ

 ダイアログページは拡大しながら表示される「ポップアニメーション」で表示され、ダイアログの左上に「閉じるボタン」が自動的に表示されます。

テーマの切り替え

 jQuery MobileではCSS3を利用したCSSフレームワークが採用されています。ページ要素に対してdata-theme属性「a」〜「e」を指定すると、デザインテーマを切り替えられます。

サンプル5[HTML]


<div data-role="page" id="page1" data-theme="b">


<画像>04-01.jpg,04-02.jpg
04-03.jpg,04-04.jpg
jQuery Mobileで用意されているテーマ、左から「b」「c」「d」「e」」

 jQuery Mobileの各UIパーツは指定したテーマに沿ったカラーリングで表示されます。ページ全体ではなく指定したパーツだけ個別にもテーマを適用できます。

 jQuery Mobileの正式版リリース時には、テーマを簡単にカスタマイズできる「ThemeRoller」も提供される予定です。

<画像>05.jpg
jQuery UIで提供されるThemeRoller。jQuery Mobileでも同様の仕組みが提供される予定

ページ遷移

 jQuery Mobileではさまざまなページ遷移のアニメーションエフェクトが用意されています。

 詳しくは連載第3回を参照してください。

jQuery Mobileのマークアップの基本とCSSの変更
http://ascii.jp/elem/000/000/609/609620/index-4.html

 上記ページで解説しているアニメーションのほかには、次のようなアニメーションも設定できます。

ページを表示したときと逆のアニメーションを設定する data-direction="reverse"

 a要素に対してdata-direction属性「reverse」を設定すると、指定したアニメーションと逆向きの動きでリンクを作成できます。たとえば、右から左にスライドするアニメーションが設定されているときにreverseを利用すると、ページが左から右にスライドします。

サンプル6[HTML]


<a href="#page1" data-direction="reverse">page1</a>


リストの表示

 スマートフォンサイトで多用されるのが、リスト表示です。jQuery Mobileではさまざまなリスト表示のUIが用意されています。

一般的なリスト data-role属性「listview」

 ul、ol/li要素などのリストでマークアップされた項目にdata-role属性「listview」を追加すると、スマートフォンに最適化されたリストとして表示されます(サンプル7、サンプル8)。

サンプル7[HTML]


<ul data-role="listview">
  <li>list</li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
</ul>


<画像>06.jpg
jQuery Mobileで利用できるリスト

サンプル8[HTML]


<ol data-role="listview">
  <li>list</li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
</ol>


<画像>07.jpg
ol要素でリストを作成すると左に通し番号が表示される

 リスト内の項目がa要素で包まれている場合は、右端に矢印が付いたリンクリストとして表示されます。

サンプル9[HTML]


<ul data-role="listview">
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
</ul>


<画像>08.jpg
左に矢印が表示されるリンクリスト

 入れ子状態のリストでは、最初にメイン(親)のリストが表示され、リストをタップするとページが遷移して子リストが表示されます(サンプル10)。

サンプル10[HTML]


<ul data-role="listview">
  <li>list
    <ul>
      <li><a href="#page2">list2</a></li>
      <li><a href="#page2">list2</a></li>
      <li><a href="#page2">list2</a></li>
    </ul>
  </li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
  <li>list</li>
</ul>


<画像>09-01.jpg、09-02.jpg
メインのリストと子リスト、現在のバージョンでは子リストはテーマbと同じカラーリングが適用される

分割リスト

 li内に2つのリンクを記述すると、1つのリスト項目に2つのリンクを設定できる分割リストも作成できます

サンプル11[HTML]


<ul data-role="listview">
  <li><a href="#page2">list</a><a href="#page2">detail</a></li>
  <li><a href="#page2">list</a><a href="#page2">detail</a></li>
  <li><a href="#page2">list</a><a href="#page2">detail</a></li>
  <li><a href="#page2">list</a><a href="#page2">detail</a></li>
  <li><a href="#page2">list</a><a href="#page2">detail</a></li>
</ul>


 分割リストでは、2番目のリンクはリンクアイコンだけが表示されます。

<画像>10.jpg
1つのリスト項目に2つのリンクを設定できる分割リスト

分割リストのアイコンを設定 data-split-icon属性

 分割リストで表示するアイコンは、data-split-icon属性で変更できます(利用できるアイコンの種類は、後述するアイコンの項目で解説します)。たとえば、サンプル12のように「gear」を設定すると歯車のようなアイコンになります。

サンプル12[HTML]


<ul data-role="listview" data-split-icon="gear">


<画像>11.jpg
アイコンをgear(歯車)に変えた状態

分割リストのテーマを設定 data-split-them属性

 分割リストではdata-split-them属性を利用してテーマを適用できます。分割リストのリンクアイコンは、デフォルトではテーマ「b」が適用されていますが、data-split-themeでページのデザインに合ったテーマを適用できます。

サンプル13[HTML]


<ul data-role="listview" data-split-theme="a">


<画像>12.jpg
アイコンのテーマをページテーマと同じaに設定した状態

角丸のリスト data-inset属性「true」

 ul/ol要素に対してdata-inset属性「true」を付けると、角丸の立体的なリストにできます。

サンプル14[HTML]


<ul data-role="listview" data-inset="true">


<画像>13.jpg
角丸のリスト

説明付きのリスト

 リスト内では、サンプル15のように見出し要素とp要素などを組み合わせることで説明を表示できます。

サンプル15[HTML]


<ul data-role="listview">
  <li><a href="#page2"><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><h1>見出し</h1><p>説明の内容</p></a></li>
</ul>


<画像>14.jpg
説明付きのリスト

 class属性「ui-li-aside」を設定した要素を記述すると、リスト項目の右上に補足的な情報も表示できます。

サンプル16[HTML]


<ul data-role="listview">
  <li><a href="#page2"><p class="ui-li-aside">2011年7月20日</p><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><p class="ui-li-aside">2011年7月20日</p><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><p class="ui-li-aside">2011年7月20日</p><h1>見出し</h1><p>説明の内容</p></a></li>
  <li><a href="#page2"><p class="ui-li-aside">2011年7月20日</p><h1>見出し</h1><p>説明の内容</p></a></li>
</ul>


<画像>15.jpg
ページ右上に補足説明を追加した表示

リストに見出しを設定 data-role属性「list-divider」

 リスト内のli要素にdata-role属性「list-divider」を追加すると、その項目は見出し項目として扱われます(サンプル17)。

サンプル17[HTML]


<ul data-role="listview">
  <li data-role="list-divider">見出し</li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li data-role="list-divider">見出し</li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
</ul>


<画像>16.jpg
リストに見出しを設定した表示

見出しのテーマを変更する data-dividertheme属性

 ul要素やol要素に対してdata-dividertheme属性を設定すると、見出しのテーマを変更できます。デフォルトでは「b」のテーマが適用されています。

サンプル18[HTML]


<ul data-role="listview" data-dividertheme="a">
  <li data-role="list-divider">見出し</li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li data-role="list-divider">見出し</li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
</ul>


<画像>17.jpg
見出しのテーマを「a」に変更した状態

カウントバブルの追加 class属性「ui-li-count」

 リスト内に数値を記述し、class属性「ui-li-count」を付けた要素で包むと、リスト項目の右側にカウントバブルが表示されます。Webサイトの新着情報の件数を表示する場合などに利用できます。

サンプル19[HTML]


<ul data-role="listview">
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
</ul>


<画像>18.jpg
リスト右部にカウントバブルが表示される

カウントバブルのテーマの変更 data-count-theme属性

 カウントバブルのデザインテーマは、data-count-theme属性で変更できます。

サンプル20[HTML]


<ul data-role="listview" data-count-theme="a">
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
  <li><a href="#page2">list<span class="ui-li-count">10</span></a></li>
</ul>


<画像>19.jpg
カウントバブルのテーマを「a」に変更した状態

画像付きのリスト

 各リスト項目内のimg要素を記述すると、左側に画像が表示される画像付きリストを利用できます。img要素で指定した画像は80×80pxに自動的にリサイズされます。

サンプル21[HTML]


<ul data-role="listview">
  <li><a href="#page2"><img src="thumbnail1.jpg">list</a></li>
  <li><a href="#page2"><img src="thumbnail2.jpg">list</a></li>
  <li><a href="#page2"><img src="thumbnail3.jpg">list</a></li>
  <li><a href="#page2"><img src="thumbnail4.jpg">list</a></li>
  <li><a href="#page2"><img src="thumbnail5.jpg">list</a></li>
</ul>


<画像>20.jpg
リストの左側に画像が表示される

 より小さな画像をアイコンのようにして表示したい場合は、class属性「ui-li-icon」を使います。画像が16×16pxで表示されます。

サンプル22[HTML]


<ul data-role="listview">
  <li><a href="#page2"><img src="thumbnail1.jpg" class="ui-li-icon">list</a></li>
  <li><a href="#page2"><img src="thumbnail2.jpg" class="ui-li-icon">list</a></li>
  <li><a href="#page2"><img src="thumbnail3.jpg" class="ui-li-icon">list</a></li>
  <li><a href="#page2"><img src="thumbnail4.jpg" class="ui-li-icon">list</a></li>
  <li><a href="#page2"><img src="thumbnail5.jpg" class="ui-li-icon">list</a></li>
</ul>


<画像>21.jpg
リストの左側にアイコン画像が表示されるが、少しずれて表示されてしまう

 ただし、jQuery Mobileの現在のバージョン(1.0ベータ)では画像が40×40pxにリサイズされ、表示がずれてしまいます。現状ではサンプル23のように、CSSでサイズを指定することで問題を回避できます。

サンプル23[HTML]


<ul data-role="listview">
  <li><a href="#page2"><img src="thumbnail1.jpg" class="ui-li-icon" style="max-width:16px;max-height:16px;">list</a></li>
  <li><a href="#page2"><img src="thumbnail2.jpg" class="ui-li-icon" style="max-width:16px;max-height:16px;">list</a></li>
  <li><a href="#page2"><img src="thumbnail3.jpg" class="ui-li-icon" style="max-width:16px;max-height:16px;">list</a></li>
  <li><a href="#page2"><img src="thumbnail4.jpg" class="ui-li-icon" style="max-width:16px;max-height:16px;">list</a></li>
  <li><a href="#page2"><img src="thumbnail5.jpg" class="ui-li-icon" style="max-width:16px;max-height:16px;">list</a></li>
</ul>


<画像>22.jpg
画像が適切なアイコンサイズで表示される

検索フィルタ data-filter属性「true」

 jQuery Mobileのリストには、リスト内の項目を絞り込める検索フィルタ機能が用意されています。ul/ol要素にdata-filter属性「true」を追加すると、リストの上部に検索フォームが配置され、検索キーワードを入力すると一致する項目だけが表示されます。

サンプル24[HTML]


<ul data-role="listview" data-filter="true">
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
</ul>


<画像>23.jpg
リスト上部に絞り込み検索が追加される

 検索フォームのプレースホルダー(初期値)には「Filter items...」という値が入っています。この値は、data-filter-placeholder属性で変更できます。サンプル25では「キーワードで絞り込み」という日本語の説明に変更しています。

サンプル25[HTML]


<ul data-role="listview" data-filter="true" data-filter-placeholder="キーワードで絞り込み">
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
  <li><a href="#page2">list</a></li>
</ul>


<画像>24.jpg
プレースホルダーのテキストを変更した状態

中編に続く



Comments