フォームの外観をカスタマイズ
フォームは、web サイトでのユーザーのインタラクションに不可欠で、データを入力できるようにします。カスケーディングスタイルシート(CSS)を使用すると、フォームのフィールドのスタイル設定、フォームの視覚的表現の強化、ユーザーエクスペリエンスの向上を行うことができます。
アダプティブフォームブロックを使用すると、すべてのフォームフィールドで一貫した構造を作成できます。一貫性のある構造により、フィールドタイプとフィールド名に基づいてフォームフィールドの選択とスタイル設定を行う、CSS セレクターの開発が容易になります。
このドキュメントでは、様々なフォームコンポーネントの HTML 構造の概要を説明し、アダプティブフォームブロックのフォームフィールドのスタイルを設定する、様々なフォームフィールドの CSS セレクターの作成方法を理解するのに役立ちます。
記事を最後まで読むと、次の内容を理解できます。
- アダプティブフォームブロックに含まれているデフォルトの CSS ファイルの構造を理解できます。
- 一般的なコンポーネントや、特定のコンポーネント(ドロップダウン、ラジオグループ、チェックボックスグループなど)を含め、アダプティブフォームブロックが提供するフォームコンポーネントの HTML 構造を理解できます。
- CSS セレクターを使用して、フィールドタイプとフィールド名に基づいてフォームフィールドのスタイルを設定し、要件に基づいて一貫したスタイルを設定したり、独自のスタイルを設定したりする方法を学びます。
フォームフィールドタイプについて
スタイル設定を開始する前に、アダプティブフォームブロックでサポートされている一般的なフォームのフィールドタイプを確認します。
- 入力フィールド:テキスト入力、メール入力、パスワード入力などが含まれます。
- チェックボックスグループ:複数のオプションを選択するために使用します。
- ラジオグループ:グループから 1 つのオプションのみを選択する場合に使用します。
- ドロップダウン:選択ボックスとも呼ばれ、リストから 1 つのオプションを選択するのに使用します。
- パネル/コンテナ:関連するフォーム要素をグループ化するのに使用します。
基本的なスタイル設定の原則
特定のフォームフィールドのスタイルを設定する前に、CSS の基本概念を理解することが重要です。
- セレクター:CSS セレクターを使用すると、特定の HTML 要素をスタイル設定の対象にできます。要素セレクター、クラスセレクターまたは ID セレクターを使用できます。
- プロパティ:CSS プロパティは、要素の外観を定義します。フォームフィールドのスタイル設定に関する一般的なプロパティには、色、背景色、境界線、パディング、余白などがあります。
- ボックスモデル:CSS ボックスモデルは、パディング、境界線、余白で囲まれたコンテンツ領域として、HTML 要素の構造を記述します。
- フレックスボックス/グリッド:CSS フレックスボックスおよびグリッドレイアウトは、レスポンシブで柔軟なデザインを作成するのに強力なツールです。
アダプティブフォームブロックのフォームのスタイル設定
アダプティブフォームブロックは、標準化された HTML 構造を提供し、フォームコンポーネントの選択とスタイル設定のプロセスを簡素化します。
-
デフォルトのスタイルを更新:
/blocks/form/form.css file
を編集することで、フォームのデフォルトのスタイルを変更できます。このファイルでは、複数手順のウィザードフォームをサポートする、フォームの包括的なスタイル設定を提供します。この例では、カスタム CSS 変数を使用することを重視しており、フォーム間でのカスタマイズ、メンテナンス、統一されたスタイル設定が容易になります。アダプティブフォームブロックをプロジェクトに追加する手順について詳しくは、フォームの作成を参照してください。 -
カスタマイズ:デフォルトの
forms.css
をベースとして使用して、フォームコンポーネントのルックアンドフィールを変更してカスタマイズし、視覚的に魅力があり、ユーザーに使いやすいものにします。このファイルの構造は、web サイト全体で一貫したデザインを推進し、フォームのスタイルを編成および維持することを推奨します。
forms.css の構造の分類
-
グローバル変数:
:root
レベルで定義されているこれらの変数(--variable-name
)には、一貫性を保ち、更新を容易にする、スタイルシート全体で使用される値が保存されます。これらの変数は、色、フォントサイズ、パディングなどのプロパティを定義します。独自のグローバル変数を宣言することも、既存のグローバル変数を変更してフォームのスタイルを変更することもできます。 -
ユニバーサルセレクタースタイル:
*
セレクターはフォーム内のすべての要素に一致し、box-sizing
プロパティをborder-box
に設定するなど、スタイルがデフォルトですべてのコンポーネントに適用されます。 -
フォームのスタイル設定: この節では、セレクターを使用して特定の HTML 要素をターゲットにするフォームコンポーネントのスタイル設定に焦点を当てます。入力フィールド、テキスト領域、チェックボックス、ラジオボタン、ファイル入力、フォームラベル、説明のスタイルを定義します。
-
ウィザードのスタイル設定(該当する場合): この節では、ウィザードのレイアウトのスタイル設定に特化しています。複数の手順を含むフォームで、各手順が 1 つずつ表示されます。ウィザードコンテナ、フィールドセット、凡例、ナビゲーションボタン、レスポンシブレイアウトのスタイルを定義します。
-
メディアクエリ: これらは、様々な画面サイズに合わせてスタイルを提供し、それに応じてレイアウトとスタイルを調整します。
-
その他のスタイル: このセクションでは、成功メッセージまたはエラーメッセージ、ファイルのアップロード領域、フォーム内で発生する可能性のあるその他の要素のスタイルを対象としています。
コンポーネント構造
アダプティブフォームブロックは、様々なフォーム要素に対して一貫した HTML 構造を提供し、スタイルと管理を簡単にします。スタイル設定の目的で CSS を使用してコンポーネントを操作できます。
一般コンポーネント(ドロップダウン、ラジオグループ、チェックボックスグループを除く):
ドロップダウン、ラジオグループ、チェックボックスグループを除くすべてのフォームフィールドには、次の HTML 構造があります。
code language-html |
---|
|
-
クラス:div 要素には、特定の要素とスタイル設定をターゲットにする、いくつかのクラスがあります。フォームフィールドをスタイル設定する CSS セレクターを開発するには、
{Type}-wrapper
またはfield-{Name}
クラスが必要です。- {Type}:フィールドタイプ別にコンポーネントを識別します。例えば、テキスト(text-wrapper)、数値(number-wrapper)、日付(date-wrapper)です。
- {Name}:名前別にコンポーネントを識別します。フィールドの名前に使用できる文字は英数字のみで、名前内の複数の連続するダッシュは 1 つのダッシュ
(-)
に置き換えられ、フィールド名の開始ダッシュと終了ダッシュは削除されます。例えば、名(field-first-name field-wrapper)です。 - {FieldId}:フィールドの一意の識別子で、自動的に生成されます。
- {Required}:フィールドが必須かどうかを示すブール値です。
-
ラベル:
label
要素はフィールドの説明テキストを提供し、for
属性を使用して入力要素に関連付けます。 -
入力:
input
要素は、入力するデータのタイプを定義します。例えば、テキスト、番号、メールです。 -
説明(オプション):クラス
field-description
のdiv
は、ユーザーに追加情報または手順を提供します。
HTML 構造の例
code language-html |
---|
|
code language-css |
---|
|
.{Type}-wrapper
:フィールドタイプに基づいて、外側のdiv
要素をターゲットにします。例えば、.text-wrapper
はすべてのテキストフィールドをターゲットにします。.field-{Name}
:さらに、特定のフィールド名に基づいて要素を選択します。例えば、.field-first-name
は「名」テキストフィールドをターゲットにします。このセレクターは、field-{Name} クラスを持つ要素をターゲットにするのに使用できますが、注意することが重要です。この特定のケースでは、入力自体だけでなくラベルや説明要素もターゲットにするので、入力フィールドのスタイル設定には役に立ちません。テキスト入力フィールド(.text-wrapper input)をターゲットにするセレクターなど、より具体的なセレクターを使用することをお勧めします。
一般コンポーネントの CSS セレクターの例
code language-css |
---|
|
ドロップダウンコンポーネント
ドロップダウンメニューの場合、input
要素の代わりに select
要素を使用します。
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
次の CSS に、ドロップダウンコンポーネントの CSS セレクターの例をいくつか示します。
code language-css |
---|
|
- ラッパーをターゲットにする:最初のセレクター(
.drop-down-wrapper
)は外側のラッパー要素をターゲットにし、スタイルがドロップダウンコンポーネント全体に適用されるようにします。 - Flexbox レイアウト:Flexbox は、ラベル、ドロップダウン、説明を垂直に配置して、すっきりとしたレイアウトを実現します。
- ラベルのスタイル設定:ラベルは太字のフォントとわずかな余白で目立ちます。
- ドロップダウンのスタイル設定:
select
要素には、境界線、パディング、丸い角が追加され、洗練された外観が得られます。 - 背景色:視覚的な調和を図るために、一貫した背景色を設定します。
- 矢印のカスタマイズ:オプションのスタイルでは、デフォルトのドロップダウン矢印を非表示にし、Unicode 文字と位置を使用してカスタム矢印を作成します。
ラジオグループ
ドロップダウンコンポーネントと同様に、ラジオグループにも独自の HTML 構造と CSS 構造があります。
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
- フィールドセットのターゲティング
code language-css |
---|
|
このセレクターは、クラス radio-group-wrapper を持つフィールドセットをターゲットにします。これは、ラジオグループ全体に一般的なスタイルを適用する場合に便利です。
- ラジオボタンラベルのターゲティング
code language-css |
---|
|
- 名前に基づいて、特定のフィールドセット内のすべてのラジオボタンラベルをターゲットにする
code language-css |
---|
|
チェックボックスグループ
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
-
外側のラッパーのターゲティング:これらのセレクターは、ラジオグループとチェックボックスグループの両方の最も外側にあるコンテナをターゲットにし、グループ構造全体に一般的なスタイルを適用できます。これは、間隔、整列、その他のレイアウト関連のプロパティを設定する場合に便利です。
code language-css /* Targets radio group wrappers */ .radio-group-wrapper { margin-bottom: 20px; /* Adds space between radio groups */ } /* Targets checkbox group wrappers */ .checkbox-group-wrapper { margin-bottom: 20px; /* Adds space between checkbox groups */ }
-
ターゲットグループラベル:このセレクターは、ラジオとチェックボックスの両方のグループラッパー内の
.field-label
要素をターゲットとします。これにより、これらのグループ専用のラベルのスタイルを設定でき、グループがさらに目立つようになります。code language-css .radio-group-wrapper legend, .checkbox-group-wrapper legend { font-weight: bold; /* Makes the group label bold */ }
-
個々の入力とラベルのターゲティング:これらのセレクターは、個々のラジオボタン、チェックボックスおよび関連するラベルをより詳細に制御できます。これらを使用して、サイズ調整や間隔の調整を行ったり、より明確な視覚スタイルを適用したりできます。
code language-css /* Styling radio buttons */ .radio-group-wrapper input[type="radio"] { margin-right: 5px; /* Adds space between the input and its label */ } /* Styling radio button labels */ .radio-group-wrapper label { font-size: 15px; /* Changes the label font size */ } /* Styling checkboxes */ .checkbox-group-wrapper input[type="checkbox"] { margin-right: 5px; /* Adds space between the input and its label */ } /* Styling checkbox labels */ .checkbox-group-wrapper label { font-size: 15px; /* Changes the label font size */ }
-
ラジオボタンとチェックボックスの外観のカスタマイズ:この方法では、デフォルトの入力を非表示にし、
:before
および:after
擬似要素を使用して、「チェック済み」状態に基づいて外観を変更するカスタムビジュアルを作成します。code language-css /* Hide the default radio button or checkbox */ .radio-group-wrapper input[type="radio"], .checkbox-group-wrapper input[type="checkbox"] { opacity: 0; position: absolute; } /* Create a custom radio button */ .radio-group-wrapper input[type="radio"] + label::before { /* ... styles for custom radio button ... */ } .radio-group-wrapper input[type="radio"]:checked + label::before { /* ... styles for checked radio button ... */ } /* Create a custom checkbox */ /* Similar styling as above, with adjustments for a square shape */ .checkbox-group-wrapper input[type="checkbox"] + label::before { /* ... styles for custom checkbox ... */ } .checkbox-group-wrapper input[type="checkbox"]:checked + label::before { /* ... styles for checked checkbox ... */ }
パネル/コンテナコンポーネント
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
-
fieldset 要素は、パネルコンテナとして機能し、クラス panel-wrapper と、パネル名(field-login)に基づいてスタイル設定する追加クラスがあります。
-
凡例要素(
)は、「ログイン情報」というテキストとクラスフィールドラベルを持つパネルタイトルとして機能します。data-visible="false" 属性を JavaScript で使用すると、タイトルの表示/非表示を制御できます。
-
フィールドセット内では、複数の.{Type}-wrapper 要素(この場合は .text-wrapper と .password-wrapper)がパネル内の個々のフォームフィールドを表します。
-
各ラッパーには、前の例と同様にラベル、入力フィールド、説明が含まれています。
- パネルのターゲティング:
code language-css |
---|
|
.panel-wrapper
セレクターは、クラス panel-wrapper を使用してすべての要素のスタイルを設定し、すべてのパネルに一貫した外観を作成します。
- パネルタイトルのターゲティング:
code language-css |
---|
|
.panel-wrapper legend
セレクターは、パネル内の凡例要素のスタイルを設定し、タイトルを視覚的に目立たせます。
- パネル内の個々のフィールドのターゲティング:
code language-css |
---|
|
.panel-wrapper .{Type}-wrapper
セレクターは、パネル内の.{Type}-wrapper
クラスを使用してすべてのラッパーをターゲットにし、フォームフィールド間の間隔をスタイル設定できるようにします。
- 特定のフィールドのターゲティング(オプション):
code language-css |
---|
|
- これらのオプションのセレクターを使用すると、パネル内の特定のフィールドラッパーをターゲットにして、ユーザー名フィールドをハイライト表示するなど、独自のスタイルを設定できます。
繰り返し可能なパネル
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
各パネルの構造は単一パネルの例と同じですが、次の追加の属性があります。
-
data-repeatable="true":この属性は、JavaScript またはフレームワークを使用して、パネルを動的に繰り返すことができることを示します。
-
一意の ID と名前:パネル内の各要素には、パネルのインデックスに基づく一意の ID(例:name-1、email-1)と name 属性(例:name="contacts[0].name")があります。これにより、複数のパネルが送信された場合に適切なデータ収集ができるようになります。
- すべての繰り返し可能なパネルのターゲティング:
code language-css |
---|
|
セレクターを使用すると、繰り返し可能なすべてのパネルのスタイルが設定され、一貫したルックアンドフィールが保証されます。
- パネル内の個々のフィールドのターゲティング:
code language-css |
---|
|
このセレクターを使用すると、繰り返し可能なパネル内のすべてのフィールドラッパーのスタイルが設定され、フィールド間の一貫した間隔が維持されます。
- (パネル内の)特定のフィールドのターゲティング:
code language-css |
---|
|
ファイル添付
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
- class 属性は、添付ファイル(claim_form)の指定された名前を使用します。
- 入力要素の id 属性と name 属性は、添付ファイル名(claim_form)に一致します。
- files-list セクションは、最初は空です。ファイルのアップロード時に JavaScript を使用して動的に設定されます。
- 添付ファイルコンポーネント全体のターゲティング:
code language-css |
---|
|
このセレクターでは、凡例、ドラッグ領域、入力フィールド、リストを含む添付ファイルコンポーネント全体をスタイル設定します。
- 特定の要素のターゲティング:
code language-css |
---|
|
これらのセレクターでは、添付ファイルコンポーネントの様々な部分を個別にスタイル設定できます。スタイルは、デザインの好みに合わせて調整できます。
コンポーネントのスタイル設定
フォームフィールドは、特定のタイプ({Type}-wrapper
)または個人名(field-{Name}
)に基づいてスタイル設定できます。これにより、フォームの外観をより詳細に制御およびカスタマイズできます。
フィールドタイプに基づくスタイル設定
CSS セレクターを使用すると、特定のフィールドタイプをターゲットにし、スタイルを一貫して適用できます。
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
-
各フィールドは、いくつかのクラスを持つ
div
要素でラップされます。{Type}-wrapper
:フィールドのタイプを識別します。例:form-text-wrapper
、form-number-wrapper
、form-email-wrapper
。field-{Name}
:フィールドを名前で識別します。例:form-name
、form-age
、form-email
。field-wrapper
:すべてのフィールドラッパーの汎用クラス。
-
data-required
属性は、フィールドが必須かオプションかを示します。 -
各フィールドには、対応するラベル、入力要素、プレースホルダーや説明などの潜在的な追加要素があります。
code language-css |
---|
|
フィールド名に基づくスタイル設定
また、個々のフィールドを名前でターゲットにして、一意のスタイルを適用することもできます。
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
code language-css |
---|
|
この CSS は、クラス field-otp
を持つ要素内にあるすべての入力要素をターゲットとします。フォームの HTML 構造はアダプティブフォームブロックの規則に従います。つまり、クラス「field-otp」でマークされたコンテナが「otp」という名前のフィールドを保持します。