自定义表单的外观
表单对于网站上的用户交互至关重要,用户可以在其中输入数据。您可以使用级联样式表 (CSS) 来设置表单字段的样式,以增强表单的视觉呈现效果,并改善用户体验。
自适应表单块可为所有表单字段生成一致的结构。一致的结构使得开发 CSS 选择器更容易根据字段类型和字段名称来选择和设置表单字段的样式。
本文档概述了各种表单组件的 HTML 结构,有助于您了解如何为各种表单字段创建 CSS 选择器,以便设置自适应表单块的表单字段的样式。
在文章的最后:
- 您可以了解到自适应表单块中包含的默认 CSS 文件的结构。
- 您可以了解到自适应表单块提供的表单组件中的 HTML 结构,其中包括常规组件和特定组件,例如下拉列表、单选按钮组和复选框组。
- 您将会学习到如何使用 CSS 选择器根据字段类型和字段名称设置表单字段的样式,从而根据需求实现一致或独特的样式。
了解表单字段类型
在深入研究样式设置之前,让我们回顾一下 Adaptive Forms Block 支持的常见表单字段类型:
- 输入字段:包括文本输入、电子邮件输入、密码输入等。
- 复选框组:用于选择多个选项。
- 单选按钮组:用于从一个组中仅选择一个选项。
- 下拉菜单:也称为选择框,用于从列表中选择一个选项。
- 面板/容器:用于将相关的表单元素组合在一起。
基本样式设置准则
在设置特定表单字段的样式之前,了解基本的 CSS 概念至关重要:
为 Adaptive Forms Block 设置表单样式
Adaptive Forms Block 提供了标准化 HTML 结构,简化了选择表单组件并设计其样式的过程:
-
更新默认样式:您可以通过编辑
/blocks/form/form.css file
来修改表单的默认样式。此文件为表单提供全面的样式,并支持多步骤向导表单。它强调使用自定义 CSS 变量来轻松跨表单进行自定义、维护和统一样式设置。有关将 Adaptive Forms Block 添加到项目的说明,请参阅创建表单。 -
自定义:使用默认值
forms.css
作为基础,并对其进行自定义以修改表单组件的外观,使其具有视觉吸引力并且对用户友好。此文件的结构有利于组织和维护表单的样式,从而促进整个网站设计的一致性。
forms.css 的结构细分
-
全局变量: 在
:root
级别进行定义,这些变量 (--variable-name
) 存储整个样式表中使用的值,以确保一致并简化更新。这些变量定义颜色、字体大小、间距和其他属性。您可以声明自己的全局变量或修改现有变量以更改表单的样式。 -
通用选择器样式:
*
选择器匹配表单中的每个元素,确保样式默认应用于所有组件,包括将box-sizing
属性设置为border-box
。 -
表单样式设置: 此部分重点介绍使用选择器来定位特定 HTML 元素以设置表单组件的样式。它定义输入字段、文本区域、复选框、单选按钮、文件输入、表单标签和描述的样式。
-
向导样式(如果适用): 此部分专注于设计向导布局的样式,这是一个多步骤表单,其中显示每个步骤(一次显示一个)。它定义向导容器、字段集、图例、导航按钮和响应式布局的样式。
-
媒体查询: 它们提供了针对不同屏幕大小的样式,并相应地调整布局和样式。
-
其他样式::此部分介绍了成功或错误消息的样式、文件上传区域以及表单中可能显示的其他元素。
组件结构
Adaptive Forms Block 为各种表单元素提供一致的 HTML 结构,确保更轻松地设置样式和管理。您可以使用 CSS 来操作组件以设置样式。
常规组件(下拉菜单、单选按钮组和复选框组除外):
所有表单字段(下拉列表、单选按钮组和复选框组除外)都具有以下 HTML 结构:
code language-html |
---|
|
-
类:div 元素包含几个用于定位特定元素和样式的类。您需要
{Type}-wrapper
或field-{Name}
类来开发 CSS 选择器以设置表单字段的样式:- {Type}:通过字段类型标识组件。例如,文本 (text-wrapper)、数字 (number-wrapper)、日期 (date-wrapper)。
- {Name}:通过名称标识组件。字段名称只能包含字母数字字符,名称中的多个连续破折号将替换为单个破折号
(-)
,并且字段名称中的开头和结尾破折号将被删除。例如,名字 (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 |
---|
|
下拉菜单组件
对于下拉菜单,使用 select
元素而不是 input
元素:
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="contacts[0 ].name”)。这样可以在提交多个面板时进行正确的数据收集。
- 定位所有可重复面板:
code language-css |
---|
|
选择器对所有可重复的面板进行样式设置,确保一致的外观和感觉。
- 定位面板中的各个字段:
code language-css |
---|
|
此选择器对可重复面板中的所有字段包装器进行样式设置,从而保持字段之间的间距一致。
- 定位特定领域(在面板内):
code language-css |
---|
|
文件附件
code language-html |
---|
|
示例 HTML 结构
code language-html |
---|
|
- 类属性使用为文件附件提供的名称(claim_form)。
- 输入元素的 id 和名称属性与文件附件名称 (claim_form) 匹配。
- 文件列表部分最初是空的。当文件上传时,它会用 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 结构遵循 Adaptive Forms Block 的惯例,这意味着有一个标有“form-otp”类的容器包含名为“otp”的字段。