「テキストボックス」を作成しながら「ステートベースドデザイン」の考え方を理解しよう

- 1 はじめに
- 2 コンポーネント
- 3 スタイルとバリアブルの追加
- 3.1 カラーバリアブルの追加
- 3.2 エフェクトスタイルの追加
- 4 土台のフレームを作成
- 5 テキストボックスの作成
- 5.1 テキストボックスの作成
- 5.2 テキストの追加
- 6 アイコンの準備
- 7 テキストボックスのコンポーネントを作成
- 7.1 テキストボックスにアイコンを挿入
- 7.2 オートレイアウトの設定
- 7.3 フレームのプロパティ
- 7.4 テキストのプロパティ
- 7.5 フレームサイズの再設定
- 8 ステートベースドデザイン
- 8.1 ステートの種類
- 8.2 ステートに応じたプロパティ
- 8.3 エフェクトスタイルの追加
- 8.4 ステートメントデザインの作成
- 8.5 5つのテキストボックスをバリアント化
- 9 まとめ
はじめに
前回と前々回では、画面サイズとカラーデザインの方針を決めてヘッダーとフッターを作成しました。これからこの2つに挟まれる中身の部分を作っていくのですが、今回はそこで使うコンポーネントの「テキストボックス」を作成しながら「ステートベースドデザイン」について理解します。
コンポーネント
一般に、画面に配置するUI要素をコンポーネントと呼びます。FigmaのコンポーネントはFigma特有の機能ですが、ここで言うコンポーネントは一般的な呼び名なので混同しないでください。どのようなコンポーネントを使うかはターゲット業種やアプリケーションごとに異なるため、デザインの実作業に入る前に使用するコンポーネントを整理しておく必要があります。
表1は業務システムでよく使われるコンポーネントです。これまでに「ボタン」「アイコン」「フッター」「ヘッダー」を作成してきましたが、今回は入力系コンポーネントの「テキストボックス」を作成します。

私の世代では、画面に配置するUI要素を「コントロール」(Control)と呼んでいました。C#やVB.NetなどのWindowsアプリケーションではコントロールという呼び名が普通だったのです。しかし、ReactやAngularなどのWebアプリケーションではコンポーネント(Component)という呼び名が使われており、デザインの世界でも圧倒的にコンポーネントが一般的です。Webアプリケーションのデザインではコンポーネントと呼ぶことをおすすめします。
表1:業務システムで使われる主なコンポーネント
用途 | コンポーネント | 英語 | HTML要素 |
---|---|---|---|
入力系 | テキストボックス | Textbox | <text> |
数値入力ボックス | Number Input | <number> | |
日付入力ボックス | Date Picker | <date> | |
セレクトボックス | Select Box | <select> | |
チェックボックス | Checkbox | <check box> | |
ラジオボタン | Radio Button | <radio> | |
テキストエリア | Text Area | <textarea> | |
表示系 | ラベル | Label | <label> |
タイトル | Title | <h1>… <h6> | |
リスト | List | <u1> | |
テーブル | Table | <table> | |
グリッド | Grid | <div> | |
ページネーション | Pagination | <nav> | |
操作系 | ボタン | Button | <button> |
タブ | Tab | <div> | |
ナビゲーションバー | Nabigation Bar | <nav> | |
サイドメニュー | Side Menu | <aside> | |
アイコン | icon | <img> | |
フィードバック系 | モーダル/ポップアップ | Modal | <div> |
トースト通知 | Toast Notification | <div> | |
ダイアグラム | Diagram | <svg> | |
ツールチップ | Tooltip | <div> | |
プログレスバー | Progress Bar | <progress> | |
レイアウト系 | ヘッダー | Header | <header> |
フッター | Footer | <footer> | |
コンテナ | Container | <section> | |
サイドバー | Sidebar | <aside> |
スタイルとバリアブルの追加
新しいコンポーネントを作成する際に、バリアブルやスタイルを追加することはよくあります。これまでヘッダー/フッターとボタンしか作っていないので、テキストボックスの作成作業に入る前に、そこで使用するカラーバリアブルとエフェクトスタイルを追加しましょう。
カラーバリアブルの追加
本連載では、ボタンなどのUI要素の種類ごとにコレクションを作る方針としています。テキストボックス用のコレクション「インプット」を追加して、図1のようなカラーバリアブルを作成します。
- バリアブル編集ダイアログ
キャンバスのプロパティの「ローカルバリアブル」横の編集アイコンをクリックしてバリアブル編集ダイアログを表示します。
- コレクション「インプット」を作成
左上の「・・・」アイコンをクリックして「コレクションを作成」を選び、コレクション名を「インプット」にしてください。 - バリアブルの作成とスコープの設定
表2を参照しながらバリアブルを作成し、スコープタブで使用する箇所を限定してください。表2:バリアブルで作成するカラーのエイリアストークン
コレクション バリアブル名 ライブラリ指定 スコープ インプット back/primary white ☑ フレーム back/disabled soft gray ☑ フレーム back/hovered very light gray ☑ フレーム border/primary light gray ☑ 線 border/secondary blue ☑ 線 border/hovered dark gray ☑ 線 text/primary dark gray ☑ テキスト icon/primary medium gray ☑ シェイプ icon/secondary blue ☑ シェイプ
エフェクトスタイルの追加
第8回でボタンの立体感を醸し出すためにドロップシャドウを使ったエフェクト「button」を作成しました。インプットは逆に凹んだ感じを出したいので、表3のようにインナーシャドウを使ったエフェクトスタイル「input」を作成します。
- エフェクトスタイル作成ダイアログ
キャンバスのプロパティ「ローカルスタイル」のエフェクトスタイル横にある追加アイコンをクリックして「新しいエフェクトのスタイルを作成」ダイアログを表示します。
- エフェクトスタイルの名前
名前は「input/default」とします。 - ドロップシャドウを定義
デフォルトでドロップシャドウが1つ作成されるので、設定アイコンをクリックして表3に示すドロップシャドウを定義してください。
表3:エフェクトスタイル「input」のシャドウ設定
種類 X Y ぼかし範囲 広がり 色 不透明度 インナーシャドウ 0 1 2 0 #555555 5% ドロップシャドウ 0 1 3 0 #555555 10% - インナーシャドウの設定
プロパティ横の追加アイコンをクリックし、もう1つ今度はインナーシャドウを作成します。設定は表3を参照してください。ドロップシャドウがUI要素の外側に影を付けて立体感を出すのに対し、インナーシャドウは内側に影を付けて凹んでいる感じを出す効果があります。
設定が終わったら、青い「スタイルの作成」ボタンを押して完了です。私はときどき押し忘れることがあるのでご注意ください。これで標準化(デザイントークンの準備)はばっちりです。
土台のフレームを作成
現在、キャンバスとしている「コンポーネント」フレームの塗りは#FFFFFF(白)です。前回、テキストボックスを配置するボディコンテナの色を#F5F5F5(ライトグレー)とする方針にしたので、テキストボックスの部品を作成する土台もその色にして色のコントラストを確認したいところです。そのため、白い「コンポーネント」キャンバスの上に#F5F5F5のキャンバスを用意します。
ツールボックスのフレームアイコンをクリックし、白い「コンポーネント」キャンバスの上に図3左のように#F5F5F5の「ボディ」フレームを作ってください。この上でテキストボックスを作っていきます。

Figmaのページ(キャンバス)のプロパティを見ると、図3右のようにライトグレー(#F5F5F5)がデフォルトに設定されています。そのため、ユーザーがボディの背景色に#F5F5F5を採用する場合に区別がつきにくくなる問題が発生します。
この問題を回避する方法として、次の2つのアプローチが考えられます。
- ①白いフレームをキャンバスとして配置
- ②ページの背景色自体を別の色に変更する
②にすれば毎回フレームを置く手間が省けるというメリットはありますが、Figmaの標準色を変更するのも抵抗感があるので、今回は①の方法でデザインを進めています。
テキストボックスの作成
インプットは、四角いボックスに直接値を入力するコンポーネントです。入力するデータタイプにより「テキストボックス」「数値入力ボックス」「日付入力ボックス」などがあります。今回は「テキストボックス」を作成します。
テキストボックスの作成
作成するテキストボックスのプロパティを表4にまとめたので、これをもとにデザインしていきましょう。
表4:テキストボックスのプロパティ
項目 | 値 |
---|---|
サイズ | 200W ☓ 40H |
塗り(Fill) | back/primary(白) |
枠線(Border) | border/primary(ライトグレー)1px |
角丸(Border Radius) | 4px |
エフェクト(Effect) | input/default |
テキストカラー(Text Color) | text/primary(ダークグレー) |
タイポグラフィー(Typography) | input/default (16/24) |
- フレームとカラー設定
ツールパネルのフレームアイコンをクリックして、「ボディ」フレームの上に200W×40Hのテキストボックス用のフレームを作成してください。塗りは「インプット」コレクションから「back/primary」を選択し、線は「border/primary」を指定します(図4)。
- エフェクトの設定
エフェクトには、スタイル適用アイコンをクリックして、先ほど作成したエフェクトスタイル「input」を選択します。
- 角の半径
ボタンの半径は8pxにしましたが、こちらは4pxくらいにしておきます。 - 名前を変更
レイヤーパネルを見ると「ボディ」フレームの中に「Frame 1」というフレームが作成されていますね。これを右クリックして、フレームの名前を「テキストボックス」としてください。
テキストの追加
- テキストの挿入
このテキストボックスに文字を入力しましょう。ツールパネルのテキストアイコンをクリックして、テキストボックスの中央に直接「入力テキスト」という文字を書いてください。 - テキストのプロパティ
テキストを選択してプロパティパネルで「タイポグラフィー」と「塗り」を次のように設定します。コレクションを間違わないように注意してください。- 塗り:text/primary
- タイポグラフィー:input/default (16/24)
- テキストボックスの確認
ここまでの設定で図4左下のようなテキストボックスが作成されたでしょうか。レイヤーパネルの親子関係も図4の通りになっているかを確認してください。
アイコンの準備
インプットで使用するアイコンを入手しましょう。今回必要なのはテキストボックスのピッカーですが、ついでにセレクタと日付入力ボックスのピッカーアイコンもゲットします。今回もまたプラグイン「Material Design Icons」の中から検索しましょう。
- 3つのアイコンを取得
ツールボックスのアクションアイコンからプラグイン「Material Design Icons」を表示し、「search」「triangle」「calendar」というキーワードで検索して図5の3つのアイコンをアイコンフレーム上に落としてください。
- アイコンの名前を変更
最初の2つをテキストボックスのピッカーとセレクタ、3つ目を日付入力ボックスの日付ピッカーに使うので、名前も変更しておきます。レイヤーパネルで3つのアイコンフレームを順に右クリックして、次のような名前にしてください。- text-search-variant ⇒ ピッカー
- triangle-down-outline ⇒ セレクタ
- calendar-month ⇒ 日付ピッカー
- アイコンのプロパティ
「ピッカー」と「日付ピッカー」アイコンのVectorを一緒に選択して「塗り」を「icon/secondary(青)」に変更してください。「セレクタ」アイコンの方は「icon/primary(グレイ)」に変更します。アイコンのサイズはデフォルト(24×24)のままでOKです。
テキストボックスのコンポーネントを作成
さて、アイコンの準備ができたので、テキストボックスのコンポーネントを作成していきます。
テキストボックスにアイコンを挿入
「ピッカー」アイコンをコピーして、テキストボックスの右側にペーストしてください。レイヤーパネルで確認して「テキストボックス」フレームの配下に「ピッカー」と「入力テキスト」が並んでいればOKです。
オートレイアウトの設定
テキストボックスフレームにオートレイアウトを設定しましょう。レイヤーパネルの「テキストボックス」を右クリックして、「オートレイアウトを追加」してください。
フレームのプロパティ
親要素となるフレーム「テキストボックス」のプロパティを設定しましょう。親要素と子要素の配置を図6のような関係にしていきます。
- サイズ
オートレイアウトを設定した際に、サイズは自動的に164W(内包)×40H(内包)に変わっています。これを200W(固定)×40H(固定)に戻してください。 - 左右の間隔とパディング
ボタンのデザインでは左右の間隔とパディングは両方とも12PXにしました。テキストボックスは少し小さくして、どちらも8pxにします。
テキストのプロパティ
続いて、子要素の「入力テキスト」のプロパティを設定します。
- サイズ
横幅を「コンテナに合わせて拡大」にしてください。図6のようなサイズの関係になるので、テキスト幅は自動的に152W(拡大)となります。縦も「高さを固定」にして24Hにします。 - 配置
テキストの配置は、左詰めにしてください。
フレームサイズの再設定
アイコンのプロパティは変更ありません。サイズは24W×24H固定となっています。この状態で、もう1度親要素のフレームのサイズを再設定します。
- サイズを内包に変更
図7のようにサイズを固定から内包に変更してください。子要素の横幅との関係から、内包にしても200Wのままになっています。 - 最小幅と最大幅
オートレイアウトにすると、子要素や親要素との関係でサイズが自動変更されます。何も設定しないとどこまでもサイズが変わるのですが、あまり大きく(小さく)なるとデザインが間延び(窮屈に)するので、変更に制限を付けることにします。 a.最大値の設定
サイズ変更横幅のプルダウンをクリックして「最大値を追加」してください。ここでは、最大値として画面の幅(1440px)の1/4に相当する345pxを指定します。キャンバスを見ると、ここまで拡大しますよという仮想線を表示してくれます。
b.最小値の設定
続いて「最小値を160pxに設定してください。テキストが小さくなっても、ある程度の横幅を確保できるようになります。

ときどき画面幅いっぱいにテキストボックスが間延びしているアプリケーションを見ることがあります。入力枠の横幅は、どのくらいのテキストを入力する想定かユーザーに知らせるヒントでもあるので、もう少し気を配って長さを設定した方が良いかと思います。
今回のデフォルトは200Wの設計なので、画面の7つくらい横に並べることができるサイズにしています。私がよく使うテキストボックスの最大値の目安は画面幅の1/4程度です。テキストボックスが横に2つならんだときは画面の左半分、4つ並んだときに画面の横幅いっぱいに並ぶ想定です。
ステートベースドデザイン
ステートベースドデザイン(State-based Design)とは、UIの状態(State)に応じてデザインを変える手法のことです。最近のアプリケーションでは、通常(Default)の表示だけでなく、フォーカス取得時(Focused)や無効の場合(Disabled)などで異なるスタイルを適用して、ユーザーの視認性や操作性を向上させるデザインが主流です。
ステートの種類
操作中にデザインスタイルを変える状態(ステート)は次の5つが一般的です。「必須」と「推奨」は私のリコメンドですが、ユーザービリティも重要な品質なので5つとも実施すべきと考えています。
- Default:通常時(必須)
- Focused:フォーカス取得時(必須)
- Disabled:無効時/編集不可時(必須)
- Hovered:マウスホバー時(推奨)
- Active:クリック中(推奨)
ステートに応じたプロパティ
見た目の変更はCSSの設定で簡単に行うことができます。表6は、上記のテキストボックスに対してステートベースドデザインを適用した場合の例です。
表6:ステートベースドデザイン
状態 | Default | Focused | Disabled | Hovered | Active |
---|---|---|---|---|---|
サイズ | |||||
塗り | back/ disabled ライトグレー |
back/ hovered 超ライトグレー |
back/ primary(白) |
||
枠線 | border/ primary ライトグレー |
border/ secondary(青) |
border/ primary ライトグレー |
border/ hovered ダークグレー |
border/ secondary(青) |
角丸 | |||||
エフェクト | input/default | input/focused | input/active | ||
テキスト色 | |||||
タイポ グラフィー |
エフェクトスタイルの追加
先ほどDefaultのエフェクトスタイルを作成しましたが、まだFocusedとActiveのエフェクトは作っていません。表7にその2つの定義を追記したので、エフェクトスタイルを追加しましょう。
表7:エフェクトスタイル「input」のシャドウ設定
スタイル名 | 種類 | X | Y | ぼかし範囲 | 広がり | 色 | 不透明度 |
---|---|---|---|---|---|---|---|
input/default | インナーシャドウ | 0 | 1 | 2 | 0 | #555555 | 5% |
ドロップシャドウ | 0 | 1 | 3 | 0 | #555555 | 10% | |
input/focused | ドロップシャドウ | 0 | 0 | 5 | 0 | #2196F3 | 30% |
input/active | インナーシャドウ | 0 | 0 | 3 | 0 | #555555 | 20% |
あれ、表7の色がHEX直接指定になっていますね。せっかくプリミティブトークンを用意しているのに、それを使っていないのには理由があります。実は、現状のFigmaのエフェクトスタイルでカラーバリアブルを指定した場合、図8のように透明度欄が隠れてしまい100%になってしまうのです。
これを回避するためには、図8右のようにプリミティブトークンを作成する際に透明度付きのカラーバリアブルを4つ用意する方法があります。ただ、透明度ごとにトークンを作るのは面倒なので、今回は(ルールを破って)直接指定にしているのです。

HEXには6桁で色を指定する方法以外に、8桁で透明度も表す指定方法があります。
- 6桁のHEX:色のみを指定
- 8桁のHEX:色+不透明度を指定
後ろの2桁が不透明度を表す値(16進法)で、例えば100%はFF、0%は00、30%は4Dになります。不透明度は%単位でも刻んで表すことができ、#555555 5%は#5555550Dとなります。
ステートメントデザインの作成
準備ができたので、5つのステートメントデザインを作成して見た目の違いを確認してみましょう。
- テキストボックスをコピー
これまで作成してきたテキストボックスがDefaultです。テキストボックスの左側にテキストで「Default」という説明を付けてください。
続いて、説明文とテキストボックスを4つコピーして縦に並べて、テキストの説明文を図9のBeforeのように書き換えてください。また、5つのテキストボックスの名前も図9左のレイヤーパネルのように変更しておいてください。 - プロパティの適用
表6を参考に追加した4つのテキストボックスのプロパティを設定してください。適用が終わると図9のAfterのような色合いに変わると思います。後は造像力です。Defaultの状態からマウスをホバーしたらどう変わるかを頭の中でイメージしてみましょう。
5つのテキストボックスをバリアント化
テキストボックスをコンポーネントにして、5つのバリアントとしてまとめましょう。個別に作成されたUI要素をあとからバリアントする際は次のような手順となります。
- 個別にコンポーネント化
5つのテキストボックスを順番に右クリックしてコンポーネント化します。続いて、[shift]キーを押しながら5つのコンポーネントをまとめて選択してください。 - バリアントとして結合
この状態でプロパティパネル上部を見ると「バリアントとして結合」というボタンが表示されています。これをクリックすると、5つのバリアントからなるバリアントグループが作成されます。プロパティ名は「state」としてください。「バリアントとして結合」は、なぜか右クリックメニューにないので注意してください。 - バリアントグループ名を設定
レイヤーパネルでバリアントグループ名を「state」に変更します。 - プロパティ値を設定
5つのバリアントを順番に選択して、プロパティの値を設定してください。今回はバリアント名と同じく、default、focused、disabled、hovered、activeという値にします。
まとめ
今回は、以下のような内容について学びました。
- デザインを行うにあたり、システムで使うコンポーネントの種類を整理する必要がある
- Windowsアプリではコントロールと呼んでいたが、Webアプリではコンポーネントと呼ぶ
- ボタンなど立体感を出すエフェクトはドロップシャドウを使うが、凹んだ感じを出す場合はインナーシャドウを使う
- Figmaのページのデフォルト背景色が#F5F5F5なので、グレー系基調に画面をデザインする際は白いキャンバスを用意する
- オートレイアウトで最大値や最小値を設定しておくと、デザインが間延びしたり窮屈になったりすることを防止できる
- 最近のデザインでは、UIの状態に応じてデザインを変えるステートベースドデザインを採用することが多い
- デザインのステートとしてはDefault、Focused、Disable、Hovered、Activeなどのモードがある
- Figmaのエフェクトスタイルでカラーバリアブルを指定する場合は、透明度別にカラーバリアブルを作成しておく必要がある
- HEXの色指定は6桁であるが、透明度も含めて8桁で指定する場合もある
- UI要素をあとからバリアントにする場合は、UI要素すべてをコンポーネント化した後で「バリアントとして結合」を行う
さて、今回まで12回にわたってFigmaによるWebシステムのデザインについて解説してきましたが、本連載は今回でひと段落とします。まだまだ解説するべき内容はたくさんありますが、続きは本連載をまとめた書籍にて解説したいと思います。
本連載を参考に、ぜひみなさんご自身でもFigmaのさまざまな機能を試してみてください。