自訂表單的外觀
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 架構,以及複雜的樣式設計情境疑難排解技巧。
了解表單欄位類型
在深入研究樣式之前,讓我們回顧一下最適化表單區塊支援的常見表單欄位類型:
- 輸入欄位:包括文字輸入、電子郵件輸入、密碼輸入等。
- 核取方塊群組:用於選取多個選項。
- 單選按鈕群組:用於從一組選項中選取一個選項。
- 下拉式選單:也稱為選取方塊,用於從清單中選取一個選項。
- 面板/容器:用於將相關的表單元素組成群組。
基本樣式設定原則
在設定特定表單欄位的樣式之前,了解基本的 CSS 概念至關重要:
使用 CSS 自訂屬性進行全面的表單樣式設定
自適應表單區塊採用以自訂屬性 (CSS 變數) 為基礎建置而成的複雜 CSS 架構,能夠實現系統化的主題設定並讓所有表單元件呈現一致樣式。了解這種結構,是提高表單自訂與品牌化效率的關鍵。
理解 forms.css 架構
預設表單樣式位於您專案存放庫中的 /blocks/form/form.css
之下,並遵循優先考慮可維護性、一致性和自訂靈活性的結構化方法。該架構由幾個關鍵元件所組成:
CSS 自訂屬性基礎:樣式系統以在 :root
層級定義的 CSS 自訂屬性為基礎,提供一個貫穿所有表單元件的集中式主題設定系統。這些變數針對顏色、字體樣式、間距和版面屬性建立設計權杖。
區塊型 CSS 結構:Edge Delivery Services 採用區塊型架構,其中 .form
類別是所有表單相關樣式的主要命名空間,確保維持正確的範圍區隔,避免 CSS 與其他頁面元件發衝突。
元件特定樣式:使用一致的包裹器模式 (.{Type}-wrapper
) 設定個別表單元件的樣式,不但可以預測不同欄位類型選定的 CSS,還能保持整體設計系統的完整性。
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 |
---|
|
元件結構
最適化表單區塊為各種表單元素提供一致的 HTML 結構,確保輕鬆進行樣式設定和管理。您可以使用 CSS 進行樣式設定,藉此操控元件。
所有表單欄位 (不包含下拉式選單、單選按鈕群組和核取方塊群組) 都具有以下 HTML 結構:
一般元件的 HTML 結構
code language-html |
---|
|
- 類別:div 元素有幾個目標為特定元素和樣式的類別。您需要
{Type}-wrapper
或field-{Name}
類別以開發 CSS 選取器來設定表單欄位樣式: - {Type}:根據欄位類型識別元件。例如,text (text-wrapper)、number (number-wrapper)、date (date-wrapper)。
- {Name}:根據名稱識別元件。欄位名稱只能包含英數字元,名稱中的多個連續破折號將替換為單個破折號
(-)
,並且將移除欄位名稱中的開頭和結尾的破折號。例如,first-name (field-first-name field-wrapper)。 - {FieldId}:自動產生的欄位唯一識別碼。
- {Required}:一個布林值,用於表示此欄位是否為必要欄位。
- 標籤:的
label
元素提供欄位的描述性文字,並使用for
屬性將其與輸入元素相關聯。 - 輸入:
input
元素定義要輸入的資料類型。例如,text、number、email。 - 描述 (選用):
div
與類別field-description
會為使用者提供其他資訊或指示。
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>
) 可用作面板標題,其中包含文字「登入資訊」和 field-label 類別。data-visible="false" 屬性與 JavaScript 搭配使用,可以控制標題的可見度。 - 在 fieldset 內部、多個。{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 |
---|
|
- 類別屬性使用為檔案附件提供的名稱 (claim_form)。
- 輸入元素的 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 樣版專案存放庫中找到:
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
模式來針對元件設定樣式 - 維持一致性:在整個專案中使用相同的選擇器模式
- 跨裝置測試:確保表單在行動裝置、平板電腦和桌上型電腦上皆可正常運作
- 驗證無障礙設計:確保樣式不會干擾螢幕閱讀器或鍵盤導覽功能