SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ

【Web Components入門】Ionic Frameworkで使えるカスタム要素を学ぼう

再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ 第6回

  • X ポスト
  • このエントリーをはてなブックマークに追加

レイアウトを行うためのもの

 それではまず、最もベーシックなコンポーネントとして、各種画面内の外側でコンテンツを囲むために使われたり、レイアウトを組むために使われるコンポーネントについて解説します。図1のドキュメントの中でいうと、表1の2つがこれにあたります。

表1:画面部品の種類と概要
UIの種別 概要
Content 表示領域を囲むためのUI
Grid グリッド状のUIを表示する

 まずは、事実上、画面全体を囲むために使用される、Contentと呼ばれるコンポーネントについて解説します。実体としては<ion-app><ion-content>というコンポーネントがあります。実例はリスト1をご覧ください。

[リスト1]ionic-content.html
<!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のようになります。

図2:Contentのサンプル
図2:Contentのサンプル

 (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)。

[リスト2]ionic-grid.html
<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のようになります。

図3:Gridのサンプル
図3:Gridのサンプル

 格子状のレイアウトが必要になった場合は、Gridを活用するとよいでしょう。

データを入力する

 データの入力のためのコンポーネントは、表2のように多様に用意されています。

表2:データを入力するためのコンポーネント
UIの種別 概要
Action Sheet 画面下に選択肢のシートを表示する
Button ボタンを表示する
Checkbox オンオフができるチェックボックスを表示する
Date & Time Pickers 日時を選択するUIを表示する
Floating Action Button 画面右下に固定で表示するボタンを表示する
Input ユーザー入力を受け付ける
Radio ラジオボタンで選択する
Range スライダーを動かして範囲や程度を決める
Reorder 並べ替え可能なリストを表現する
Searchbar 検索バーを表示する
Segment iOSの切り替えボタンを表示する
Select 選択ダイアログを表示する
Toggle トグルスイッチを表示する

 これらの多くはHTMLフォームと併用可能なので、いくつか組み合わせてフォームを作成する例をリスト3で示します。

[リスト3]ionic-inputs.html
<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です。

図4:データ入力のコンポーネントの例
図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のようなモーダルが表示されます。

図5:日付選択モーダル
図5:日付選択モーダル

 もう一つ、簡単な入力値の例として(4)に「Checkbox」である<ion-checkbox>も使ってみました。こちらも<input type="checkbox">と近い挙動をしますが、子要素をラベルとして扱える点で、HTML標準のものよりも使い勝手が向上しています。最後に、(5)で「Button」にあたる<ion-button>を使いました。こちらもHTMLのものと近い使い方ができます。

 最後に、ちゃんとフォームとして成立しているかを確認するために、送信ボタンを押してみます。ブラウザの開発者ツールを見てみましょう(図6)。

図6:フォームデータに反映された
図6:フォームデータに反映された

 図4の内容と同等のフォームデータが送られていました。このように、自分でJavaScriptを書かなくても、少しリッチなフォームを作成できました。

次のページ
データを表示する

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
再利用性とカプセル化のためのWeb Componentsを基礎から学ぶ連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/18478 2023/10/16 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング