フォームの外観をカスタマイズ
AEM Forms の Edge Delivery Services でのフォームのスタイル設定には、CSS カスタムプロパティ、ブロックベースのアーキテクチャ、コンポーネント固有のターゲティング戦略に関する高度な理解が必要です。従来のフォームスタイル設定アプローチとは異なり、アダプティブフォームブロックは、Edge Delivery Services のパフォーマンスとアクセシビリティのメリットを維持しながら一貫性のあるテーマ設定を可能にする体系的なデザイントークンシステムを実装します。
アダプティブフォームブロックアーキテクチャは、すべてのフォームコンポーネントをまたいで標準化された HTML 構造を生成し、CSS のターゲティングとカスタマイズのための予測可能なパターンを作成します。この一貫性により、開発者は、Edge Delivery Services を非常に高速化するブロックベースのパフォーマンス最適化を保持しながら、複雑なフォーム実装をまたいで拡大・縮小できる包括的なスタイル設定システムを実装できます。
この包括的なガイドでは、CSS カスタムプロパティシステム、コンポーネント HTML 構造パターン、高度なスタイル設定テクニックなど、Edge Delivery Services エコシステム内のフォームスタイル設定の技術的な基盤について説明します。このドキュメントでは、高度なブランド化されたフォームエクスペリエンスを作成するための理論的な理解と実用的な実装ガイダンスの両方について説明します。
学習内容
CSS カスタムプロパティの取得:カラースキーム、テキスト編集の拡大・縮小、間隔システム、レイアウトパラメーターなど、フォームの外観を制御する完全な変数システムについて理解します。これらのプロパティを上書きおよび拡張して、包括的なブランドテーマを実装する方法について学びます。
コンポーネントアーキテクチャの理解:各フォームコンポーネントタイプで使用される HTML 構造パターンに関する詳細な知識を取得し、基になる機能やアクセシビリティ機能を損なわずに、正確な CSS ターゲティングとカスタマイズを可能にします。
高度なスタイル設定手法:状態ベースのスタイル設定、レスポンシブデザインの統合、Edge Delivery Services の高速読み込み特性を維持するパフォーマンスが最適化されたカスタマイズ戦略などの高度なスタイル設定パターンを実装します。
プロフェッショナルな実装戦略:デザインシステムの統合、保守可能な CSS アーキテクチャ、複雑なスタイル設定シナリオのトラブルシューティング手法など、フォームスタイル設定に対する業界標準のアプローチを学びます。
フォームフィールドタイプについて
スタイル設定を開始する前に、アダプティブフォームブロックでサポートされている一般的なフォームのフィールドタイプを確認します。
- 入力フィールド:テキスト入力、メール入力、パスワード入力などが含まれます。
- チェックボックスグループ:複数のオプションを選択するために使用します。
- ラジオグループ:グループから 1 つのオプションのみを選択する場合に使用します。
- ドロップダウン:選択ボックスとも呼ばれ、リストから 1 つのオプションを選択するのに使用します。
- パネル/コンテナ:関連するフォーム要素をグループ化するのに使用します。
基本的なスタイル設定の原則
特定のフォームフィールドのスタイルを設定する前に、CSS の基本概念を理解することが重要です。
- セレクター:CSS セレクターを使用すると、特定の HTML 要素をスタイル設定の対象にできます。要素セレクター、クラスセレクターまたは ID セレクターを使用できます。
- プロパティ:CSS プロパティは、要素の外観を定義します。フォームフィールドのスタイル設定に関する一般的なプロパティには、色、背景色、境界線、パディング、余白などがあります。
- ボックスモデル:CSS ボックスモデルは、パディング、境界線、余白で囲まれたコンテンツ領域として、HTML 要素の構造を記述します。
- フレックスボックス/グリッド:CSS フレックスボックスおよびグリッドレイアウトは、レスポンシブで柔軟なデザインを作成するのに強力なツールです。
CSS カスタムプロパティを使用した包括的なフォームスタイル設定
アダプティブフォームブロックは、カスタムプロパティ(CSS 変数)に基づいて作成された高度な CSS アーキテクチャを利用し、すべてのフォームコンポーネントをまたいで体系的なテーマ設定と一貫性のあるスタイル設定を可能にします。この構造を理解することは、効果的なフォームのカスタマイズとブランディングに不可欠です。
forms.css アーキテクチャについて
デフォルトのフォームスタイルは、プロジェクトリポジトリ(/blocks/form/form.css
)に配置され、保守性、一貫性、カスタマイズの柔軟性を優先する構造化されたアプローチに従います。アーキテクチャは、次のいくつかの主要コンポーネントで構成されます。
CSS カスタムプロパティの基盤:スタイル設定システムは、:root
レベルで定義した CSS カスタムプロパティに基づいて作成され、すべてのフォームコンポーネントを通じて適用される、一元化されたテーマ設定システムを提供します。これらの変数は、カラー、テキスト編集、間隔、レイアウトの各プロパティのデザイントークンを確立します。
ブロックベースの CSS 構造:Edge Delivery Services は、.form
クラスがすべてのフォーム関連スタイルの主要な名前空間として機能するブロックベースのアーキテクチャを採用し、適切な範囲分離を確保し、他のページコンポーネントとの CSS の競合を防ぎます。
コンポーネント固有のスタイル設定:個々のフォームコンポーネントは、全体的なデザインシステムの整合性を維持しながら、様々なフィールドタイプに対して予測可能なターゲティングを提供する一貫性のあるラッパーパターン(.{Type}-wrapper
) を使用してスタイル設定されます。
CSS カスタムプロパティのリファレンスとカスタマイズ
フォームスタイル設定システムには、フォームの外観と動作のあらゆる側面を制御する、50 を超える CSS カスタムプロパティが含まれています。これらのプロパティを理解すると、デザインの一貫性を維持しながら、包括的なカスタマイズが可能になります。
カラーシステムは、慎重に整理されたカスタムプロパティを通じて、フォームの完全な視覚的基盤を確立します。
code language-css |
---|
|
実用的なカスタマイズの例:フォームにダークテーマを実装するには、base color 変数を上書きします。
code language-css |
---|
|
システムはハードコードされた値の代わりに変数参照を使用するので、この単一の変更はすべてのフォームコンポーネントに生成されます。
テキスト編集と間隔の変数により、テキストの表示とレイアウト間隔を包括的に制御できます。
code language-css |
---|
|
実用的なカスタマイズの例:より小さなテキスト編集で、よりコンパクトなフォームレイアウトを作成するには:
code language-css |
---|
|
レイアウト変数は、フォームのサイズ、グリッドの動作、コンポーネントの配置を制御します。
code language-css |
---|
|
実用的なカスタマイズの例:視覚的な深度が強化されたカードスタイルのフォームを作成するには:
code language-css |
---|
|
CSS スタイル設定パターンとベストプラクティス
アダプティブフォームブロックは、すべてのコンポーネントをまたいで保守性、パフォーマンス、一貫性のあるスタイルを確保する特定の CSS パターンに従います。
ブロックレベルのフォームコンテナ:全体的なレイアウトと背景のスタイル設定の対象となるプライマリフォームコンテナをターゲットにします。
code language-css |
---|
|
コンポーネントラッパーパターン:一貫性のあるラッパークラスを使用して、特定のフィールドタイプをターゲットにします。
code language-css |
---|
|
フィールド固有のターゲティング:固有のスタイル要件に応じて、名前別に個々のフィールドをターゲットにします。
code language-css |
---|
|
状態ベースのスタイル設定:検証とインタラクションの状態を実装します。
code language-css |
---|
|
コンポーネント構造
アダプティブフォームブロックは、様々なフォーム要素に対して一貫した HTML 構造を提供し、スタイルと管理を簡単にします。スタイル設定の目的で CSS を使用してコンポーネントを操作できます。
ドロップダウン、ラジオグループ、チェックボックスグループを除くすべてのフォームフィールドには、次の HTML 構造があります。
一般コンポーネントの 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}:フィールドの一意の ID で、自動的に生成されます。
- {Required}:フィールドが必須かどうかを示すブール値です。
- ラベル:
label
要素はフィールドの説明テキストを提供し、for
属性を使用して入力要素に関連付けます。 - 入力:
input
要素は、入力するデータのタイプを定義します。例えば、テキスト、番号、メールです。 - 説明(オプション):クラス
field-description
のdiv
は、ユーザーに追加情報または手順を提供します。
HTML 構造の例
code language-html |
---|
|
一般コンポーネントの CSS セレクター
code language-css |
---|
|
.form .{Type}-wrapper
:フィールドタイプに基づいて、フィールドラッパー要素をターゲットにします。例えば、.form .text-wrapper
はすべてのテキストフィールドコンテナをターゲットにします。.form .{Type}-wrapper input
:ラッパー内の実際の入力要素をターゲットにします。これは、フォーム入力のスタイル設定に推奨されるパターンです。.form .field-{Name}
:特定のフィールド名に基づいて、要素をターゲットにします。例えば、.form .field-first-name
は「名」フィールドコンテナをターゲットにします。入力要素を具体的にターゲットにするには、.form .field-{Name} input
を使用します。- 回避:
main .form form .{Type}-wrapper
- これにより、不要な CSS の特異性が生じ、保守が困難になります。
一般コンポーネントの CSS セレクターの例
code language-css |
---|
|
ドロップダウンメニューの場合、input
要素の代わりに select
要素を使用します。
ドロップダウンコンポーネントの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
ドロップダウンコンポーネントの CSS セレクター
次の CSS に、ドロップダウンコンポーネントの CSS セレクターの例をいくつか示します。
code language-css |
---|
|
- ラッパーをターゲットにする:最初のセレクター(
.drop-down-wrapper
)は外側のラッパー要素をターゲットにし、スタイルがドロップダウンコンポーネント全体に適用されるようにします。 - Flexbox レイアウト:Flexbox は、ラベル、ドロップダウン、説明を垂直に配置して、すっきりとしたレイアウトを実現します。
- ラベルのスタイル設定:ラベルは太字のフォントとわずかな余白で目立ちます。
- ドロップダウンのスタイル設定:
select
要素には、境界線、パディング、丸い角が追加され、洗練された外観が得られます。 - 背景色:視覚的な調和を図るために、一貫した背景色を設定します。
- 矢印のカスタマイズ:オプションのスタイルでは、デフォルトのドロップダウン矢印を非表示にし、Unicode 文字と位置を使用してカスタム矢印を作成します。
ドロップダウンコンポーネントと同様に、ラジオグループにも独自の HTML 構造と CSS 構造があります。
ラジオグループの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
ラジオグループの CSS セレクター
- フィールドセットのターゲティング
code language-css |
---|
|
このセレクターは、クラス radio-group-wrapper を持つフィールドセットをターゲットにします。これは、ラジオグループ全体に一般的なスタイルを適用する場合に便利です。
- ラジオボタンラベルのターゲティング
code language-css |
---|
|
- 名前に基づいて、特定のフィールドセット内のすべてのラジオボタンラベルをターゲットにする
code language-css |
---|
|
チェックボックスグループの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
チェックボックスグループの CSS セレクター
- 外側のラッパーのターゲティング:これらのセレクターは、ラジオグループとチェックボックスグループの両方の最も外側にあるコンテナをターゲットにし、グループ構造全体に一般的なスタイルを適用できます。これは、間隔、整列、その他のレイアウト関連のプロパティを設定する場合に便利です。
code language-css |
---|
|
- ターゲティンググループラベル:このセレクターは、ラジオとチェックボックスの両方のグループラッパー内の
.field-label
要素をターゲットとします。これにより、これらのグループ専用のラベルのスタイルを設定でき、グループがさらに目立つようになります。
code language-css |
---|
|
- 個々の入力とラベルのターゲティング:これらのセレクターは、個々のラジオボタン、チェックボックスおよび関連するラベルをより詳細に制御できます。これらを使用して、サイズ調整や間隔の調整を行ったり、より明確な視覚スタイルを適用したりできます。
code language-css |
---|
|
- ラジオボタンとチェックボックスの外観のカスタマイズ:この方法では、デフォルトの入力を非表示にし、
:before
および:after
擬似要素を使用して、「チェック済み」状態に基づいて外観を変更するカスタムビジュアルを作成します。
code language-css |
---|
|
パネル/コンテナコンポーネントの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
- fieldset 要素は、パネルコンテナとして機能し、クラス panel-wrapper と、パネル名(field-login)に基づいてスタイル設定する追加クラスがあります。
- 凡例要素(
<legend>
)は、「ログイン情報」というテキストとクラスフィールドラベルを持つパネルタイトルとして機能します。data-visible="false" 属性を JavaScript で使用すると、タイトルの表示/非表示を制御できます。 - フィールドセット内では、複数。{Type}-wrapper 要素(この場合は .text-wrapper と .password-wrapper)がパネル内の個々のフォームフィールドを表します。
- 各ラッパーには、前の例と同様にラベル、入力フィールド、説明が含まれています。
パネル/コンテナコンポーネントの CSS セレクターの例
- パネルのターゲティング:
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 |
---|
|
- これらのオプションのセレクターを使用すると、パネル内の特定のフィールドラッパーをターゲットにして、ユーザー名フィールドをハイライト表示するなど、独自のスタイルを設定できます。
繰り返し可能なパネルの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
各パネルの構造は単一パネルの例と同じですが、次の追加の属性があります。
-
data-repeatable="true":この属性は、JavaScript またはフレームワークを使用して、パネルを動的に繰り返すことができることを示します。
-
一意の ID と名前:パネル内の各要素には、パネルのインデックスに基づく一意の ID(例:name-1、email-1)と name 属性(例:name="contacts[0].name")があります。これにより、複数のパネルが送信された場合に適切なデータ収集ができるようになります。
繰り返し可能なパネルの CSS セレクター
- すべての繰り返し可能なパネルのターゲティング:
code language-css |
---|
|
セレクターを使用すると、繰り返し可能なすべてのパネルのスタイルが設定され、一貫したルックアンドフィールが保証されます。
- パネル内の個々のフィールドのターゲティング:
code language-css |
---|
|
このセレクターを使用すると、繰り返し可能なパネル内のすべてのフィールドラッパーのスタイルが設定され、フィールド間の一貫した間隔が維持されます。
- (パネル内の)特定のフィールドのターゲティング:
code language-css |
---|
|
添付ファイルの HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
- class 属性は、添付ファイル(claim_form)の指定された名前を使用します。
- 入力要素の id 属性と name 属性は、添付ファイル名(claim_form)に一致します。
- files-list セクションは、最初は空です。ファイルのアップロード時に JavaScript を使用して動的に設定されます。
添付ファイルコンポーネントの CSS セレクター
- 添付ファイルコンポーネント全体のターゲティング:
code language-css |
---|
|
このセレクターでは、凡例、ドラッグ領域、入力フィールド、リストを含む添付ファイルコンポーネント全体をスタイル設定します。
- 特定の要素のターゲティング:
code language-css |
---|
|
これらのセレクターでは、添付ファイルコンポーネントの様々な部分を個別にスタイル設定できます。スタイルは、デザインの好みに合わせて調整できます。
コンポーネントのスタイル設定
フォームフィールドは、特定のタイプ({Type}-wrapper
)または個人名(field-{Name}
)に基づいてスタイル設定できます。これにより、フォームの外観をより詳細に制御およびカスタマイズできます。
CSS セレクターを使用すると、特定のフィールドタイプをターゲットにし、スタイルを一貫して適用できます。
HTML 構造
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
属性は、フィールドが必須かオプションかを示します。 -
各フィールドには、対応するラベル、入力要素、プレースホルダーや説明などの潜在的な追加要素があります。
CSS セレクターの例
code language-css |
---|
|
また、個々のフィールドを名前でターゲットにして、一意のスタイルを適用することもできます。
HTML 構造
code language-html |
---|
|
HTML 構造の例
code language-html |
---|
|
CSS セレクターの例
code language-css |
---|
|
この CSS は、クラス field-otp
を持つ要素内にあるすべての入力要素をターゲットとします。Edge Delivery Services のフォーム構造は アダプティブフォームブロック規則に従っており、コンテナは「otp」という名前のフィールドの場合は「field-otp」など、フィールド固有のクラスでマークされます。
CSS ファイルの構造と実装
リファレンス実装
フォームスタイルの完全なリファレンスは、AEM Forms ボイラープレートリポジトリで入手できます。
code language-none |
---|
|
このファイルは、CSS カスタムプロパティシステムの正規実装として機能し、すべてのフォームスタイル設定の基盤となります。 これには、すべての CSS 変数、コンポーネントのスタイル設定パターン、レスポンシブデザインの実装に関する包括的な定義が含まれます。
Edge Delivery Services プロジェクトでは、以下の構造化されたアプローチを通じてフォームのスタイル設定を実装します。
code language-none |
---|
|
CSS カスタムプロパティの上書き:グローバルスタイルのフォーム変数を上書きして、ブランド固有のテーマ設定を実装します。
code language-css |
---|
|
コンポーネント固有のカスタマイズ:
CSS 変数システムを維持しながら、コンポーネント固有のスタイル設定を追加します。
code language-css |
---|
|
レスポンシブデザインの統合:一貫性のあるレスポンシブ動作を実現するために、メディアクエリ内で CSS カスタムプロパティを利用します。
code language-css |
---|
|
完全なスタイル設定の実装例
この節では、CSS カスタムプロパティを使用して、最新のブランド化されたフォームを作成する方法について説明します。実装は、理解とナビゲーションを簡単にするために、明確なサブセクションに分類されています。
CSS カスタムプロパティを使用して、ブランドのカラーパレット、間隔、テキスト編集を定義します。
code language-css |
---|
|
フォームコンテナに現代的な背景、境界線の半径、シャドウを適用して、視覚的に魅力的なレイアウトを実現します。
code language-css |
---|
|
テキスト、メール、数値入力フィールドのスタイルを設定して、クリーンで現代的な外観を実現します。
code language-css |
---|
|
必要に応じて、特定のフィールド、状態またはコンポーネントをターゲットにすることで、フォームのスタイル設定をさらに拡張できます。高度なパターンについて詳しくは、前の節を参照してください。
code language-css |
---|
|
この包括的なアプローチにより、CSS カスタムプロパティを使用して、アダプティブフォームブロックシステムの構造的整合性とアクセシビリティ機能を維持しながら、高度なテーマ設定を実現する方法が示されます。
CSS の問題のトラブルシューティング
code language-css |
---|
|
code language-css |
---|
|
code language-css |
---|
|
code language-css |
---|
|
コンポーネント固有のベストプラクティス
code language-css |
---|
|
code language-css |
---|
|
ベストプラクティスのまとめ
- CSS カスタムプロパティを使用:テーマ設定の一貫性を保持するために変数を活用します
- ブロックベースのアーキテクチャに従う:
.form
を主要なブロックセレクターとして使用します - 過度の特異性を回避:必要な場合を除き、
main .form form
を使用しません - ラッパーをターゲットにする:コンポーネントのターゲティングには、
.{Type}-wrapper
ラッパーパターンを使用します - 一貫性を維持:プロジェクト全体で同じセレクターパターンを使用します
- デバイス間でテスト:モバイル、タブレット、デスクトップでフォームが適切に動作することを確認します
- アクセシビリティを検証:スタイルがスクリーンリーダーやキーボードナビゲーションを妨げないことを確認します