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

前編中編に続き、jQuery Mobileの機能について解説します。

グリッドレイアウト

 スマートフォンはPCに比べて画面幅が狭いので、1ページを複数カラムに分割するレイアウトはスマートフォンサイトに向きません。しかし、タブナビゲーションを実装する場合など、複数カラムに分割したい場合もあります。jQuery Mobileでは要素を均等に分割して並べる「グリッドレイアウト」の機能が用意されています。

2カラム

 2カラムにしたい場合は、class属性「ui-grid-a」を付けた要素の内側に、class属性「ui-block-a」とclass属性「ui-block-b」を付けた要素をそれぞれ配置します。

サンプル01[HTML]


<div class="ui-grid-a">
  <div class="ui-block-a"><strong>I'm Block A</strong></div>
  <div class="ui-block-b"><strong>I'm Block B</strong></div>
</div>
<画像>01.jpg
class属性「ui-block-a」が左にclass属性「ui-block-b」が右に配置される

 このままだと少し分かりにくいので、それぞれのカラムの内側の要素にclass属性「ui-bar」と「ui-bar-e」を付与し、背景や余白が設定された「ui-bar」というスタイルで表示してみましょう(サンプル2)。

サンプル02[HTML]


<div class="ui-grid-a">
  <div class="ui-block-a"><div class="ui-bar ui-bar-e"><strong>I'm Block A</strong></div></div>
  <div class="ui-block-b"><div class="ui-bar ui-bar-e"><strong>I'm Block B</strong></div></div>
</div>
<画像>02.jpg
各カラムにテーマを適用させた状態

3カラム

 3カラムにするには、class属性「ui-grid-b」を親要素に適用します。

サンプル03[HTML]


<div class="ui-grid-b">
  <div class="ui-block-a"><div class=" ui-bar ui-bar-e">Block A</div></div>
  <div class="ui-block-b"><div class=" ui-bar ui-bar-e">Block B</div></div>
  <div class="ui-block-c"><div class=" ui-bar ui-bar-e">Block C</div></div>
</div>
<画像>03.jpg
3カラムにした状態

4カラム

 4カラムにするには、class属性「ui-grid-c」を親要素に適用します。

サンプル04[HTML]


<div class="ui-grid-c">
  <div class="ui-block-a"><div class=" ui-bar ui-bar-e">A</div></div>
  <div class="ui-block-b"><div class=" ui-bar ui-bar-e">B</div></div>
  <div class="ui-block-c"><div class=" ui-bar ui-bar-e">C</div></div>
  <div class="ui-block-d"><div class=" ui-bar ui-bar-e">D</div></div>
</div>
<画像>04.jpg
4カラムにした状態

5カラム

 5カラムにするには、class属性「ui-grid-d」を親要素に適用します。

サンプル05[HTML]


<div class="ui-grid-d">
  <div class="ui-block-a"><div class=" ui-bar ui-bar-e">A</div></div>
  <div class="ui-block-b"><div class=" ui-bar ui-bar-e">B</div></div>
  <div class="ui-block-c"><div class=" ui-bar ui-bar-e">C</div></div>
  <div class="ui-block-d"><div class=" ui-bar ui-bar-e">D</div></div>
  <div class="ui-block-e"><div class=" ui-bar ui-bar-e">E</div></div>
</div>
<画像>05.jpg
5カラムにした状態

複数行の分割

 グリッドを複数行配置する場合は、class属性「ui-block-a」~「ui-block-e」を繰り返します。たとえば、2行3列に配置したい場合は、class属性「ui-block-a」「ui-block-b」「ui-block-c」の後に、再びclass属性「ui-block-a」「ui-block-b」「ui-block-c」を設定した要素を記述します。

サンプル06[HTML]


<div class="ui-grid-b">
  <div class="ui-block-a"><div class=" ui-bar ui-bar-e">Block A</div></div>
  <div class="ui-block-b"><div class=" ui-bar ui-bar-e">Block B</div></div>
  <div class="ui-block-c"><div class=" ui-bar ui-bar-e">Block C</div></div>
  <div class="ui-block-a"><div class=" ui-bar ui-bar-e">Block A</div></div>
  <div class="ui-block-b"><div class=" ui-bar ui-bar-e">Block B</div></div>
  <div class="ui-block-c"><div class=" ui-bar ui-bar-e">Block C</div></div>
</div>
<画像>06.jpg
3カラムを複数行に設定した状態

開閉パネル data-role属性「collapsible」

 親要素にdata-role属性「collapsible」を指定すると、開閉パネルを作成できます。開閉パネルではh1~h6要素で見出しを設定し、その後ろの要素でパネルの内容を記述します。

サンプル07[HTML]


<div data-role="collapsible">
  <h3>開閉パネル</h3>
  <p>クリックするとパネルが開きます。</p>
</div>
<画像>07-01.jpg,07-02.jpg
開閉パネルでは見出し部分が -アイコンが付いたボタンになり(左)、ボタンをタップするとパネルが閉じ+アイコンに変化する(右)

 開閉パネルは、デフォルトではパネルが開いた状態で表示されますが、 data-collapsed属性「true」を指定するとパネルを閉じて表示します(サンプル8)。

サンプル08[HTML]


<div data-role="collapsible" data-collapsed="true">
  <h3>開閉パネル</h3>
  <p>クリックするとパネルが開きます。</p>
</div>
<画像>08-01.jpg,08-02.jpg
初期状態でパネルが閉じている開閉パネル

アコーディオンパネル data-role属性「collapsible-set」

 複数の開閉パネルをdata-role属性「collapsible-set」を指定した要素で包むと、アコーディオンパネルを作成できます。

サンプル09[HTML]


<div data-role="collapsible-set">
  <div data-role="collapsible">
    <h3>パネル1</h3>
    <p>パネル1が開きます。</p>
  </div>
  <div data-role="collapsible">
    <h3>パネル2</h3>
    <p>パネル2が開きます。</p>
  </div>
  <div data-role="collapsible">
    <h3>パネル3</h3>
    <p>パネル3が開きます。</p>
  </div>
</div>
<画像>09.jpg
アコーディオンパネル

 デフォルトでは最後のパネルが開いた状態で表示されますが、任意のパネル要素にdata-collapsed属性「false」を付与するとそのパネルは開いて、そのほかのパネルは閉じて表示されます。

 ただし、執筆時のバージョン(ベータ2)では正常に動作しておらず、閉じたいパネルすべてにdata-collapsed属性「true」を指定する必要があります。

サンプル10[HTML]


<div data-role="collapsible-set">
  <div data-role="collapsible" data-collapsed="false">
    <h3>パネル1</h3>
    <p>パネル1が開きます。</p>
  </div>
  <div data-role="collapsible" data-collapsed="true">
    <h3>パネル2</h3>
    <p>パネル2が開きます。</p>
  </div>
  <div data-role="collapsible" data-collapsed="true">
    <h3>パネル3</h3>
    <p>パネル3が開きます。</p>
  </div>
</div>
<画像>10.jpg
パネル1を開いた状態でアコーディオンを表示する

フォーム

 jQuery Mobileでは、さまざまなフォームUIが利用できます。最後に、jQuery MobileのフォームUIをまとめて紹介します。

テキスト入力ボックス

 jQuery MobileのフォームUIは、data-role属性「fieldcontain」を指定した要素に包んで記述します。type属性「text」のinput要素を記述すると、次のように表示されます。

サンプル11[HTML]


<div data-role="fieldcontain">
  <label for="name">名前</label>
  <input type="text" id="name">
</div>
<画像>11.jpg
jQuery Mobileのスタイルで表示された1行入力ボックス

 <input type="text">以外に、<input type="password">でも同様の入力フォームが表示されます。また、HTML5で定義されている<input type="email">や<input type="url">、<input type="tel">、<input type="number">でも同様の形状で表示されます。

検索ボックス

 HTML5で追加されたtype属性<input type="search">を使うと、虫眼鏡アイコンが付いた検索用の入力フィールドが表示されます。

サンプル12[HTML]


<div data-role="fieldcontain">
  <label for="search">検索</label>
  <input type="search" name="search" id="search" value="" />
</div>
<画像>12.jpg
type属性「search」では検索用のボックスが表示される

複数行入力ボックス(テキストエリア)

 textarea要素を利用した複数行入力ボックスも、jQuery Mobileのスタイルで表示できます。

サンプル13[HTML]


<div data-role="fieldcontain">
  <label for="contact">お問い合わせ内容</label>
  <textarea id="contact"></textarea>
</div>
<画像>13.jpg
jQuery Mobileのスタイルで表示された複数行入力ボックス

スライダー

 HTML5で追加された<input type="range">でスライダーUIを利用できます。value属性にスライダーの初期値、min属性にスライダーの最小値、max属性にスライダーの最大値を指定します。

サンプル14[HTML]


<div data-role="fieldcontain">
  <label for="year">生まれた年</label>
  <input type="range" name="year" id="year" value="1980" min="1900" max="2011" />
</div>

 サンプル14の場合、初期値が1980になり、1900~2011までの範囲で選択できるスライダーが表示されます。

<画像>14.jpg
スライダーで任意の数字が選択できる

 jQuery Mobileのスライダーは、スライダーを指で操作して選択するほか、数字を直接入力することもできます。

フリップスイッチ

 「フリップスイッチ」とは、2つの選択肢からどちらか1つをタッチ操作で選択できるUIのことです。フリップスイッチは、select要素にdata-role属性「slider」を指定すると利用でき、select要素の内側に2つのoption要素を書いて項目を指定します。

サンプル15[HTML]


<div data-role="fieldcontain">
  <label for="gender">性別</label>
  <select name="gender" id="gender" data-role="slider">
    <option value="男性">男性</option>
    <option value="女性">女性</option>
  </select> 
</div>
<画像>15-1.jpg、15-2.jpg
jQuery Mobileで利用できるフリップスイッチ。初期状態では男性(右)が選択されているがボタンをタップかフリックすることでもうひとつの選択肢である女性(左)が選択される

ラジオボタン

 ラジオボタンは、スマートフォンでは非常に使いにくいフォーム部品の1つですが、jQuery Mobileを使うと指で選択しやすい形状に最適化できます。type属性に「check」を指定したinput要素をそれぞれlabel要素で関連付けし、data-role属性「controlgroup」を指定したfiledset要素で包みます。filedset要素の冒頭にはlegend要素で項目名を指定します。

サンプル16[HTML]


<div data-role="fieldcontain">
  <fieldset data-role="controlgroup">
    <legend>購入回数</legend>
    <input type="radio" name="number" id="n1" value="1回" checked="checked" />
    <label for="n1">1回</label>
    <input type="radio" name="number" id="n2" value="2回" />
    <label for="n2">2回</label>
    <input type="radio" name="number" id="n3" value="3回" />
    <label for="n3">3回</label>
    <input type="radio" name="number" id="n4" value="4回" />
    <label for="n4">4回以上</label>
  </fieldset>
</div>
<画像>16.jpg
jQuery Mobileにより最適化されたラジオボタン

 ラジオボタンはデフォルトでは縦に表示されますが、fieldset要素にdata-type属性「horizontal」を指定すると、横(水平方向)に並んだボタンにもできます。

サンプル17[HTML]


<fieldset data-role="controlgroup" data-type="horizontal">
<画像>17.jpg
横に並べたボタン。ただし、ボタンの数や文字数が多いと下に落ちてしまう

 ボタンが1行に収まらない場合は、次のようにCSSで余白を調整すると収められます。

サンプル18[CSS]


.ui-controlgroup .ui-radio .ui-btn-inner{
  /*ボタンの左右の余白を25pxから15pxに変更している*/
  padding: .6em 15px;
}
<画像>18.jpg
CSSで1行に収まるように調整した状態

 ただし、スマートフォンでは上下移動のストレスは少ないので、無理に横方向に並べる必要はありません。特に理由がなければ、縦方向に並べればよいでしょう。

チェックボックス

 jQuery Mobileではチェックボックスも使いやすいUIで表示できます。基本的な使い方はラジオボタンと同じです。

サンプル19[HTML]


<div data-role="fieldcontain">
  <fieldset data-role="controlgroup">
    <legend>お問い合わせ種別</legend> 
    <input type="checkbox" name="type1" id="type1" value="HP新規作成"> 
    <label for="type1">HP新規作成</label> 
    <input type="checkbox" name="type2" id="type2" value="HPリニューアル">
    <label for="type2">HPリニューアル</label> 
    <input type="checkbox" name="type3" id="type3" value="システム開発"> 
    <label for="type3">システム開発</label> 
    <input type="checkbox" name="type4" id="type4" value="コンサルティング"> 
    <label for="type4">コンサルティング</label>
  </fieldset>
</div>
<画像>19-1.jpg,19-2.jpg
最適化したチェックボックス(左)と項目が選択された状態(右)

 fieldset要素にdata-type属性「horizontal」を指定すると、ラジオボタンと同様、横並びにできます。

セレクトメニュー

 select要素を使ったセレクトメニューの最適化も簡単です。特に、Androidのブラウザではセレクトメニューが非常に小さいので、jQuery Mobileで最適化することでユーザビリティーを向上できます。

サンプル20[HTML]


<div data-role="fieldcontain">
  <label for="number">購入回数</label>
  <select name="number" id="number">
    <option value="">選択してください</option>
    <option value="n1">1回</option>
    <option value="n2">2回</option>
    <option value="n3">3回</option>
    <option value="n4">4回以上</option>
  </select>
</div>
<画像>20.jpg
最適化したセレクトメニュー

 さらに、jQuery Mobile独自のカスタムセレクトメニューも利用できます。カスタムセレクトメニューを利用するには、select要素にdata-native-menu属性「false」を指定します。

サンプル21[HTML]


<select name="number" id="number" data-native-menu="false">
<画像>21-1.jpg,21-2.jpg
jQuery Mobileのカスタムセレクトメニュー、ボタンをタップするとメニューが表示されるようになる

 カスタムセレクトメニューでは、option要素のvalue属性の値が空/option要素の中にテキストがない/data-pleceholder属性に「true」が指定されている、のいずれのかの場合、その項目が見出しとして機能します。サンプル21では、最初のoption要素である「<option value="">選択してください</option>」が見出しとなり、項目としては選択できません。

 カスタムセレクトメニューでは、multiple属性による複数選択も設定できます(サンプル22)。

サンプル22[HTML]


<div data-role="fieldcontain">
  <label for="type">お問い合わせ種別</label>
  <select name="type" id="type" multiple="multiple" data-native-menu="false">
    <option value="">選択してください</option>
    <option value="HP新規作成">HP新規作成</option>
    <option value="HPリニューアル">HPリニューアル</option>
    <option value="システム開発">システム開発</option>
    <option value="コンサルティング">コンサルティング</option>
  </select>
</div>
<画像>22.jpg
multipleにより複数選択可能なカスタムメニューが作成できる

ネイティブフォームの利用

 jQuery Mobileは、すべてのフォーム部品を独自のUIに最適化して表示しますが、場合によってはブラウザーのデフォルトのUIを利用したいときもあるでしょう。data-role属性「none」を指定すると、ブラウザーのデフォルトのUIで表示されます。

サンプル23[HTML]


<div data-role="fieldcontain">
  <label for="name">名前</label>
  <input type="text" id="name" data-role="none">
</div>
<画像>23.jpg
jQuery MobileのフォームUIではなくブラウザーのUIが表示される

ボタンの装飾

 jQuery Mobileでは、送信ボタンなどのUIも最適化して表示できます。

サンプル24[HTML]


<input type="button" value="キャンセル">
<input type="submit" value="送信">

 サンプル24はタッチ操作で押しやすい大きなボタンで表示されます。

<画像>24.jpg
jQuery Mobileにより最適化されたボタン

 ボタンのデザインは、data-theme属性でテーマを反映できます。

サンプル25[HTML]


<input type="button" value="キャンセル" data-theme="b">
<input type="submit" value="送信" data-theme="b">
<画像>25.jpg
デザインテーマ「b」を適用させたボタン

 ボタンは通常、幅いっぱいで表示されますが、data-inline属性「true」を指定すると文字サイズにフィットしたボタンになります。

サンプル26[HTML]


<input type="button" value="キャンセル" data-inline="true">
<input type="submit" value="送信" data-inline="true">
<画像>21.jpg
文字サイズにフィットさせたボタン

 ボタンにはdata-icon属性でアイコンも付けられます。

サンプル27[HTML]


<input type="button" value="キャンセル" data-icon="delete">
<input type="submit" value="送信" data-icon="arrow-r">
<画像>27.jpg
キャンセルボタンに×アイコンを、送信ボタンに右矢印のアイコンをつけたボタン

 data-icon属性には次のようなアイコンを利用できます(サンプル28)。

左向き矢印data-icon="arrow-l"
右向き矢印data-icon="arrow-r"
上向き矢印data-icon="arrow-u"
下向き矢印data-icon="arrow-d"
×(バツ)data-icon="delete"
+(プラス)data-icon="plus"
-(マイナス)data-icon="minus"
チェックdata-icon="check"
歯車data-icon="gear"
リフレッシュdata-icon="refresh"
進むdata-icon="forward"
戻るdata-icon="back"
テーブル状data-icon="grid"
data-icon="star"
i(情報)data-icon="info"
data-icon="home"
虫眼鏡data-icon="search"
<画像>28.jpg
ボタンで利用できる各種アイコン

 アイコンの表示位置はdata-iconpos属性で変更できます。値には、right(右)、left(左)、top(上)、bottom(下)を指定します。

サンプル29[HTML]


<button data-icon="star" data-iconpos="top"> data-iconpos="top"</button>
<button data-icon="star" data-iconpos="bottom"> data-iconpos="bottom"</button>
<button data-icon="star" data-iconpos="left"> data-iconpos="left"</button>
<button data-icon="star" data-iconpos="right"> data-iconpos="right"</button>
<画像>29.jpg
アイコンの位置を変更できる

 以上でjQuery Mobileの基本的な使い方の解説は終了です。次回は、jQuery Mobileを使った本格的なスマートフォンサイトの作り方を解説します。


Comments