レイアウトを行うためのもの
それではまず、最もベーシックなコンポーネントとして、各種画面内の外側でコンテンツを囲むために使われたり、レイアウトを組むために使われるコンポーネントについて解説します。図1のドキュメントの中でいうと、表1の2つがこれにあたります。
UIの種別 | 概要 |
---|---|
Content | 表示領域を囲むためのUI |
Grid | グリッド状のUIを表示する |
まずは、事実上、画面全体を囲むために使用される、Contentと呼ばれるコンポーネントについて解説します。実体としては<ion-app>
と<ion-content>
というコンポーネントがあります。実例はリスト1をご覧ください。
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ionic Framework - レイアウト</title> <script type="module" src="https://cdn.jsdelivr.net/npm/@ionic/core/dist/ionic/ionic.esm.js"></script> <script nomodule src="https://cdn.jsdelivr.net/npm/@ionic/core/dist/ionic/ionic.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@ionic/core/css/ionic.bundle.css" /> </head> <body> <!-- (1) Ionic Framework製のアプリケーションの最も外側に必ず配置する --> <ion-app> <!-- (3)ヘッダー --> <ion-header> <ion-toolbar> <ion-title>Ionic Framework - レイアウト</ion-title> </ion-toolbar> </ion-header> <!-- (2) コンテンツ --> <ion-content class="ion-padding"><!-- (4) --> <!-- テキストを表示 --> <ion-text color="primary">color=primaryのテキストです</ion-text> </ion-content> </ion-app> <script type="module" src="https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons/ionicons.esm.js"></script> <script nomodule src="https://cdn.jsdelivr.net/npm/ionicons/dist/ionicons/ionicons.js"></script> </body> </html>
リスト1を実際に動かすと、図2のようになります。
(1)の<ion-app>
はIonic Frameworkで作成するすべてのアプリケーションの最も外側に配置するコンポーネントです。画面にオーバーレイするタイプのコンポーネントは<ion-app>
の領域に描画されます。
他にもいくつかの効果があるので、是非外側に配置しておいてください。(2)の<ion-content>
は、その画面のメインコンテンツを表示するための領域を提供します。1画面につき配置してよい<ion-content>
は1つだけです。(3)のようなヘッダーやフッターと併用することで、コンテンツ部分とタイトルやコントロールの部分を分離して扱うこともできます。
ちなみに、(4)の ion-padding
というクラスはCSSユーティリティと呼ばれる、便利なCSSとしてフレームワーク側で用意されているものです。フレームワーク標準のちょうどいいマージンやパディングが付与されるので、活用するとよいでしょう。
もう一つ、Gridについても紹介します。<ion-grid>
は、コンテンツを格子上に配置するためのコンポーネントです。行を表す<ion-row>
と、列を表す<ion-col>
を組み合わせて利用します(リスト2)。
<ion-grid> <ion-row> <ion-col>1-1</ion-col> <ion-col>1-2</ion-col> <ion-col>1-3</ion-col> </ion-row> <ion-row> <ion-col>2-1</ion-col> <ion-col>2-2</ion-col> <ion-col>2-3</ion-col> </ion-row> <ion-row> <ion-col>3-1</ion-col> <ion-col>3-2</ion-col> <ion-col>3-3</ion-col> </ion-row> </ion-grid>
リスト2を実行すると図3のようになります。
格子状のレイアウトが必要になった場合は、Gridを活用するとよいでしょう。
データを入力する
データの入力のためのコンポーネントは、表2のように多様に用意されています。
UIの種別 | 概要 |
---|---|
Action Sheet | 画面下に選択肢のシートを表示する |
Button | ボタンを表示する |
Checkbox | オンオフができるチェックボックスを表示する |
Date & Time Pickers | 日時を選択するUIを表示する |
Floating Action Button | 画面右下に固定で表示するボタンを表示する |
Input | ユーザー入力を受け付ける |
Radio | ラジオボタンで選択する |
Range | スライダーを動かして範囲や程度を決める |
Reorder | 並べ替え可能なリストを表現する |
Searchbar | 検索バーを表示する |
Segment | iOSの切り替えボタンを表示する |
Select | 選択ダイアログを表示する |
Toggle | トグルスイッチを表示する |
これらの多くはHTMLフォームと併用可能なので、いくつか組み合わせてフォームを作成する例をリスト3で示します。
<form method="post"> <ion-item> <ion-label position="fixed">名前</ion-label> <!-- (1) --> <ion-input type="text" name="name"></ion-input> </ion-item> <ion-item> <ion-label position="fixed">希望日時</ion-label> <!-- (2) --> <ion-datetime-button datetime="datetime"></ion-datetime-button> <!-- (3) --> <ion-modal> <ion-datetime id="datetime" name="desired-datetime"></ion-datetime> </ion-modal> </ion-item> <div class="ion-padding"> <!-- (4) --> <ion-checkbox name="agree-to-terms">利用規約に同意します</ion-checkbox> </div> <!-- (5) --> <ion-button type="submit">送信</ion-button> </form>
実際に動かして、いくつか値を入力してみたのが図4です。
それでは、リスト3の構成要素について解説します。まずはベーシックなところで、(1)では「Input」にあたる<ion-input>
を使って入力欄を作成しました。HTML標準の<input>
と、さほど使い方は変わりませんが、入力時にアニメーションがついたりして、少しリッチになっています。
次に、日時入力の例として、(2)には「Date & Time Pickers」の<ion-datetime-button>
を使用しました。これは単に選択中の日時を表示するだけのボタンなのですが、(3)の日時選択UIである<ion-datetime>
とモーダル表示のための<ion-modal>
を組み合わせることで、手軽に日時選択モーダルをフォームへと組み込むことができます。
<ion-datetime-button>
のdatetime
属性に、<ion-datetime>
のid
属性を指定することで、ボタンと選択UIが連動します。実際に日付のボタンをクリックすると、図5のようなモーダルが表示されます。
もう一つ、簡単な入力値の例として(4)に「Checkbox」である<ion-checkbox>
も使ってみました。こちらも<input type="checkbox">
と近い挙動をしますが、子要素をラベルとして扱える点で、HTML標準のものよりも使い勝手が向上しています。最後に、(5)で「Button」にあたる<ion-button>
を使いました。こちらもHTMLのものと近い使い方ができます。
最後に、ちゃんとフォームとして成立しているかを確認するために、送信ボタンを押してみます。ブラウザの開発者ツールを見てみましょう(図6)。
図4の内容と同等のフォームデータが送られていました。このように、自分でJavaScriptを書かなくても、少しリッチなフォームを作成できました。