自定义表单的外观?
适用于 AEM Forms 的 Edge Delivery Services 中的表单样式设置需要对 CSS 自定义属性、基于块的架构以及组件特定的目标针对策略有深入的理解。与传统的表单样式设置方法不同,自适应表单块实施了一个系统性设计令牌系统,可实现一致的主题化,同时保持 Edge Delivery Services 的性能和无障碍优势。
自适应表单块架构可为所有表单组件生成标准化的 HTML 结构,创建可预测的 CSS 目标选择和自定义的模式。这种一致性使开发人员能够实施综合样式设置系统,可以适应各种复杂表单的实施,同时保留基于块的性能优化,使 Edge Delivery Services 异常快速。
本综合指南涵盖了 Edge Delivery Services 生态系统中表单样式设置的基础技术知识,包括 CSS 自定义属性系统、组件 HTML 结构模式和高级样式设置技术。此文档为创建复杂的品牌化表单体验提供了理论讲解和实际实施指导。
您将掌握
CSS 自定义属性:了解控制表单外观的完整变量系统,包括配色方案、排版层级体系、间距体系和布局参数。了解如何覆盖和扩展这些属性,以全面实施各种品牌主题。
理解组件架构:深入了解每种表单组件类型使用的 HTML 结构模式,实现精确的 CSS 目标选择和自定义,同时不影响底层功能或无障碍性。
高级样式设置技巧:实施复杂的样式模式,包括基于状态的样式、响应式设计集成和性能优化的自定义策略,以保持 Edge Delivery Services 的快速加载特性。
专业实施策略:学习表单样式设置的行业标准方法,包括设计系统集成、可维护的 CSS 架构以及针对复杂样式场景的错误修复技术。
了解表单字段类型
在深入研究样式设置之前,让我们回顾一下 Adaptive Forms Block 支持的常见表单字段类型:
- 输入字段:包括文本输入、电子邮件输入、密码输入等。
- 复选框组:用于选择多个选项。
- 单选按钮组:用于从一个组中仅选择一个选项。
- 下拉菜单:也称为选择框,用于从列表中选择一个选项。
- 面板/容器:用于将相关的表单元素组合在一起。
基本样式设置准则
在设置特定表单字段的样式之前,了解至关重要:
- :CSS 选择器可让您针对特定的 HTML 元素进行样式设置。您可以使用元素选择器、类选择器或 ID 选择器。
- :CSS 属性定义元素的外观。用于设置表单字段的样式的常见属性包括颜色、背景颜色、边框、间距、边距等。
- :CSS 框模型将 HTML 元素的结构描述为由间距、边框和边距包围的内容区域。
- 贵濒别虫产辞虫/网格:颁厂厂 和是用于创建响应式和灵活设计的强大工具。
使用 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 |
---|
|
自定义实际示例:要为表单实施一个深色主题,请覆盖基本颜色变量:
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 |
---|
|
组件结构
Adaptive Forms Block 为各种表单元素提供一致的 HTML 结构,确保更轻松地设置样式和管理。您可以使用 CSS 来操作组件以设置样式。
所有表单字段(下拉菜单、单选按钮组和复选框组除外)都具有以下 HTML 结构:
通用组件的 HTML 结构
code language-html |
---|
|
- 类:div 元素包含几个用于定位特定元素和样式的类。您需要
{Type}-wrapper
或field-{Name}
类来开发 CSS 选择器以设置表单字段的样式: - {Type}:通过字段类型标识组件。例如,文本 (text-wrapper)、数字 (number-wrapper)、日期 (date-wrapper)。
- 调狈补尘别皑:通过名称标识组件。字段名称只能包含字母数字字符,名称中的多个连续破折号将替换为单个破折号
(-)
,并且字段名称中的开头和结尾破折号将被删除。例如,名字 (field-first-name field-wrapper)。 - 调贵颈别濒诲滨诲皑:它是自动生成的字段的唯一标识符。
- 调搁别辩耻颈谤别诲皑:这是一个布尔值,表示该字段是否为必填字段。
- 标签:
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 |
---|
|
对于下拉菜单,使用 select
元素而不是 input
元素:
下拉组件的 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="contacts[0 ].name”)。这样可以在提交多个面板时进行正确的数据收集。
可重复面板的 CSS 选择器
- 定位所有可重复面板:
code language-css |
---|
|
选择器对所有可重复的面板进行样式设置,确保一致的外观和感觉。
- 定位面板中的各个字段:
code language-css |
---|
|
此选择器对可重复面板中的所有字段包装器进行样式设置,从而保持字段之间的间距一致。
- 定位特定领域(在面板内):
code language-css |
---|
|
文件附件的 HTML 结构
code language-html |
---|
|
示例 HTML 结构
code language-html |
---|
|
- 类属性使用为文件附件提供的名称(肠濒补颈尘冲蹿辞谤尘)。
- 输入元素的 id 和名称属性与文件附件名称 (claim_form) 匹配。
- 文件列表部分最初是空的。当文件上传时,它会用 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 Boilerplate 存储库中提供完整的表单样式引用:
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
模式确定组件目标 - 保持一致性:在整个项目中使用相同的选择器模式
- 跨设备测试:确保表单在移动设备、平板电脑和桌面设备上能正常运行
- 验证无障碍可访问性:确保样式不会干扰屏幕阅读器或键盘导航