design-systems-slds-apply

design-systems-slds-apply

熱門

使用正確的藍圖、樣式鉤子、工具類別和圖示來套用符合 SLDS 的 UI。在建立任何需要 SLDS 的 UI、在 Lightning Base Components 與 SLDS Blueprints 之間做選擇、套用樣式鉤子進行主題化、使用工具類別進行版面配置與間距,或選擇圖示時使用。觸發詞包括「建立 modal」、「建立表單」、「資料表」、「SLDS 樣式」、「使用鉤子設定樣式」、「新增圖示」。

774星標
282分支
更新於 2026/7/24
SKILL.md
唯讀
名稱
design-systems-slds-apply
描述

使用正確的藍圖、樣式鉤子、工具類別和圖示來套用符合 SLDS 的 UI。在建立任何需要 SLDS 的 UI、在 Lightning Base Components 與 SLDS Blueprints 之間做選擇、套用樣式鉤子進行主題化、使用工具類別進行版面配置與間距,或選擇圖示時使用。觸發詞包括「建立 modal」、「建立表單」、「資料表」、「SLDS 樣式」、「使用鉤子設定樣式」、「新增圖示」。

套用 SLDS

Salesforce Lightning Design System (SLDS) 是一個包含數千個元件的 CSS 框架。此技能教導代理程式如何尋找並正確使用它們。

版本: 此技能以 SLDS v2 為目標。舊版的 --lwc-* token 與 slds-*--modifier 語法已棄用。

稽核範圍: 搭配的 design-systems-slds-validate 技能分析器僅掃描 .css.html.js 檔案。請直接將其用於 LWC 及類似的 HTML/CSS/JS 元件;對於 JSX/TSX 或其他框架特定的範本格式,請將其視為部分訊號,並輔以人工審查。

什麼是 SLDS?

元件 數量 說明
Lightning Base Components ~70 預先建置的 LWC 元件(僅限 LWC)
SLDS Blueprints 85 適用於任何框架的 CSS/HTML 模式
Styling Hooks 523 用於主題化的 CSS 自訂屬性(--slds-g-*
Utility Classes 1,147 用於間距、版面配置、可見性的快速樣式類別
Icons 1,732 涵蓋 5 個類別的 SVG 圖示

範圍

此技能涵蓋:

  • 針對特定 UI 模式應使用哪個藍圖
  • 如何使用鉤子設定樣式(顏色、間距、排版、陰影、邊框)
  • 針對版面配置、間距、可見性應使用哪些工具類別
  • 應使用哪個圖示以及來自哪個類別
  • SLDS 命名慣例、類別結構、鉤子語法

此技能包含基本的無障礙提醒(圖示替代文字、焦點外框、顏色非唯一指示)於驗證檢查清單中。完整的 WCAG 合規需要專門的無障礙審查。

此技能不涵蓋(請使用搭配技能):

  • 設計決策 -- 視覺層級、組成、互動模式
  • LWC 機制 -- 元件結構、@wire、@api、生命週期、事件(尚未提供)
  • 完整無障礙 -- WCAG 符合性、ARIA 模式、鍵盤導覽、焦點管理、對比度(尚未提供)

元件選擇階層

永遠遵循此順序:

1. Lightning Base Components (LWC only)    ← 先檢查
2. SLDS Blueprints (any framework)         ← 使用精確的 SLDS 類別
3. Custom with Styling Hooks               ← 使用 var(--slds-g-*)
4. Custom CSS (last resort)                ← 仍使用鉤子作為值

若在 LWC 中建置,請先檢查是否有 LBC:Lightning Component Library

若沒有 LBC(或未使用 LWC),請選擇 SLDS Blueprint。請參閱 references/component-selection.md


核心規則

應做

  • 遵循選擇階層:LBC > Blueprint > Hooks > Custom CSS
  • 對所有可主題化的值使用 var(--slds-g-*, fallback)
  • 建立自訂類別(my-*c-*)而非覆寫 .slds-*
  • 在使用前驗證每個鉤子、類別與工具確實存在 — 執行搜尋腳本;切勿僅根據命名模式假設元件存在(請參閱 使用前驗證
  • 將表面顏色與表面上的文字顏色配對
  • 在每個 <lightning-icon> 上提供 alternative-text

不應做

  • 硬編碼顏色、間距或排版值
  • 直接覆寫 .slds-* 類別
  • 使用已棄用的 --lwc-* token 作為主要值
  • 使用 --slds-s-*(共用)鉤子 — 它們是私有的/內部的
  • 重新指派鉤子值 — 僅使用 var() 參考它們
  • 僅使用顏色來傳達意義
  • 透過從其他系列插值模式來發明鉤子名稱(請參閱下方的命名陷阱)

鉤子命名陷阱

SLDS 鉤子系列並非都遵循相同的命名模式。代理程式經常假設 {prefix}-{number} 普遍適用,而發明出不存在的鉤子。在使用前務必透過隨附的 search-hooks.cjs 腳本或 assets/hooks-index.json 驗證鉤子是否存在。

陷阱 1:字體大小鉤子並非編號

錯誤(不存在) 正確 備註
--slds-g-font-size-3 --slds-g-font-scale-1 字體大小使用 font-scale-*,而非 font-size-*
--slds-g-font-size-4 --slds-g-font-scale-2 僅存在 --slds-g-font-size-base(基礎大小)
--slds-g-font-size-8 --slds-g-font-scale-6 刻度範圍:neg-4 到 10

規則: 對於字體大小,使用 --slds-g-font-size-base(唯一的基礎大小)或 --slds-g-font-scale-*(編號刻度)。切勿使用 --slds-g-font-size-N

陷阱 2:顏色鉤子總是需要數字

錯誤(不存在) 正確 備註
--slds-g-color-on-surface --slds-g-color-on-surface-2 所有顏色鉤子都需要數字
--slds-g-color-on-accent --slds-g-color-on-accent-1 根據強調程度選擇 1/2/3
--slds-g-color-surface --slds-g-color-surface-1 沒有未編號的基礎形式

規則: 每個 --slds-g-color-* 鉤子都以數字結尾。根據強調程度選擇:-1(低)、-2(中)、-3(高)。

陷阱 3:並非所有值都有對應的鉤子

某些 CSS 值(例如,標籤對齊的 min-width: 7rem)沒有 SLDS 鉤子。這是可接受的:

.c-field-label {
  /* 此寬度沒有 SLDS 鉤子;有意的自訂值 */
  min-width: 7rem;
}

規則: 當沒有鉤子時,直接使用該值並加上註解說明這是刻意的。盡可能偏好使用 SLDS 網格工具(slds-size_*)作為硬編碼寬度的替代方案。


使用前驗證

規則: 切勿在未先確認 SLDS 鉤子、工具類別、藍圖類別或圖示存在於中繼資料中時,就將其包含在產生的程式碼中。根據命名模式猜測是發明元件的主要來源。

在輸出任何 SLDS 元件之前執行適當的搜尋命令:

元件 驗證命令 真相來源
樣式鉤子(--slds-g-* node scripts/search-hooks.cjs --prefix "<hook-name>" assets/hooks-index.json
工具類別(slds-* node scripts/search-utilities.cjs --search "<class-name>" assets/utilities-index.json
藍圖 / CSS 類別 node scripts/search-blueprints.cjs --search "<pattern>" 然後讀取 YAML assets/blueprints/components/*.yaml
圖示 node scripts/search-icons.cjs --query "<description>" assets/icon-metadata.json

如果搜尋沒有結果:請勿使用該元件。 從搜尋結果中尋找替代方案,或使用已驗證的鉤子建立自訂樣式。


命名慣例

使用一致的前綴來命名自訂類別,以避免與 SLDS 衝突:

模式 使用案例 範例
my-* 一般自訂樣式 my-card-header
c-* LWC 元件特定 c-accountList-row
[namespace]-* 套件/應用程式命名空間 acme-dashboard-widget

避免: 通用名稱(containerwrapper)、類似 SLDS 的名稱(custom-slds-button)、在 SLDS 類別上使用 BEM(slds-card__custom-header)。

自訂鉤子命名空間:

:root {
  --my-app-primary: var(--slds-g-color-accent-1);
  --my-app-card-padding: var(--slds-g-spacing-4);
}

知識地圖

此技能捆綁了全面的 SLDS 知識。視需要讀取檔案 — 不要一次讀取所有內容。

決策指南(每個任務從這裡開始)

檔案 何時閱讀
references/component-selection.md 選擇元件或藍圖時
references/styling-decision-guide.md 套用顏色、間距、排版、陰影時
references/icons-decision-guide.md 選擇或實作圖示時
references/utilities-quick-ref.md 使用工具類別進行版面配置/間距時

搜尋腳本(尋找特定元件)

腳本 搜尋內容 範例
scripts/search-blueprints.cjs 85 個藍圖 YAML --search "dialog"
scripts/search-hooks.cjs 523 個樣式鉤子 --prefix "--slds-g-color-accent-"
scripts/search-icons.cjs 1,732 個圖示與同義詞 --query "save button"
scripts/search-utilities.cjs 1,147 個工具類別 --category "grid"

深入指南(閱讀以取得詳細規則)

資料夾 內容 索引
references/overviews/ 基礎概念(顏色、間距、排版等) references/README.md
references/styling-hooks/ 鉤子類別與詳細用法 references/README.md
references/utilities/ 27 個工具類別類別 references/README.md
references/slds-development-guide.md 完整的 SLDS 開發指南 --

原始中繼資料(用於查詢的結構化資料)

請勿直接讀取中繼資料 JSON 檔案 — 它們對代理程式上下文來說太大(hooks-index.json 超過 6,000 行;icon-metadata.json 超過 38,000 行)。請使用上述搜尋腳本來查詢它們。

檔案 內容 行數
assets/blueprints/components/*.yaml 85 個藍圖規格(類別、變體、a11y、HTML) 每個約 50-200
assets/hooks-index.json 523 個鉤子與值和 CSS 屬性 約 6,300
assets/icon-metadata.json 1,732 個圖示與用於搜尋的同義詞 約 38,500
assets/utilities-index.json 1,147 個工具類別與 CSS 規則 約 6,900

編寫工作流程

階段 1:了解需求

識別:

  • 需要什麼 UI 模式?(表單、表格、modal、卡片等)
  • 使用什麼框架?(LWC、React、Vue、Angular、原生)
  • 它會顯示什麼資料?
  • 它需要哪些狀態?(載入中、空白、錯誤、成功)

階段 2:選擇元件

  1. 如果是 LWC:檢查 Lightning Component Library 是否有 LBC
  2. 搜尋藍圖node scripts/search-blueprints.cjs --search "<pattern>"
  3. 讀取藍圖 YAMLassets/blueprints/components/<name>.yaml 以取得精確的類別、修飾符、狀態與無障礙需求
  4. 沒有符合? 使用鉤子建立自訂樣式(請參閱階段 3)

詳細資訊:references/component-selection.md

階段 3:套用樣式

  1. 閱讀references/styling-decision-guide.md
  2. 顏色:分類角色(表面、強調、回饋、邊框)然後選擇鉤子
  3. 間距:使用工具類別(slds-p-*slds-m-*)或鉤子(--slds-g-spacing-*
  4. 版面配置:使用網格工具(slds-gridslds-colslds-size_*
  5. 自訂 CSS:使用 var(--slds-g-*, fallback),僅使用自訂類別前綴

階段 4:新增圖示

  1. 閱讀references/icons-decision-guide.md
  2. 搜尋node scripts/search-icons.cjs --query "<description>"
  3. 在 LWC 中:使用帶有 alternative-text<lightning-icon>
  4. 在非 LWC 中:使用帶有 slds-icon 類別與 slds-assistive-text 的 SVG

階段 5:驗證(必做 — 請勿跳過)

步驟 1:執行 SLDS linter。 這是必要的。目標是零違規。

npx @salesforce-ux/slds-linter@latest lint <component-path>

Linter 會捕捉硬編碼值、類別覆寫與已棄用的 token。在繼續之前修正所有違規。 不要將違規合理化為可接受。

步驟 2:驗證沒有發明的鉤子。 確認輸出中的每個 --slds-g-* 鉤子都存在於 assets/hooks-index.json 中。與 checklists.md 中的 T051 檢查交叉比對。

步驟 3:執行 checklists.md 以進行 linter 無法自動化的檢查:

  • 所有 var(--slds-g-*) 都有 fallback 值(T002)
  • 表面/強調/回饋顏色鉤子已正確配對(T010–T013)
  • 間距使用鉤子或工具類別 — 沒有神奇的 px 值(T020–T021)
  • 字體大小使用 --slds-g-font-scale-*,而非 --slds-g-font-size-N(T031)
  • 所有圖示都有無障礙文字(A004)
  • 自訂類別使用 my-*c-* 前綴(Q010)

步驟 4(選用):執行完整的品質稽核,使用 design-systems-slds-validate 技能在程式碼審查或部署前取得評分報告。請直接將其用於 LWC / HTML-CSS-JS 元件;對於 JSX/TSX 輸出,請將結果視為僅部分涵蓋。目標是在標記工作完成前達到 B 級(≥80)或更高。


快速參考

常見鉤子模式

/* 表面 + 文字配對(務必使用編號變體) */
background: var(--slds-g-color-surface-1, #ffffff);
color: var(--slds-g-color-on-surface-2, #181818);

/* 標準內距 */
padding: var(--slds-g-spacing-4, 1rem);

/* 卡片式容器 */
border-radius: var(--slds-g-radius-border-2, 0.25rem);
box-shadow: var(--slds-g-shadow-1, 0 2px 4px rgba(0,0,0,0.1));

/* 主要動作的強調色 */
background: var(--slds-g-color-accent-1, #0176d3);
color: var(--slds-g-color-on-accent-1, #ffffff);

/* 排版 -- 使用 font-scale-*,而非 font-size-*(僅存在 font-size-base) */
font-size: var(--slds-g-font-scale-2, 0.875rem);

常見工具模式

<!-- 響應式網格 -->
<div class="slds-grid slds-wrap slds-gutters">
  <div class="slds-col slds-size_1-of-1 slds-medium-size_1-of-2">...</div>
</div>

<!-- 間距 -->
<div class="slds-p-around_medium slds-m-bottom_small">...</div>

<!-- 截斷 -->
<p class="slds-truncate" title="Full text here">Full text here</p>

範例

請參閱 examples.md 以取得完整的範例,展示從意圖到 SLDS 元件選擇的完整工作流程。

驗證

請參閱 checklists.md 以取得與 design-systems-slds-validate 技能對齊的驗證檢查清單。

資源

資源 URL
SLDS 網站 https://www.lightningdesignsystem.com/
Lightning Component Library https://developer.salesforce.com/docs/component-library/overview/components
SLDS Linter https://developer.salesforce.com/docs/platform/slds-linter/guide
Styling Hooks 參考 https://www.lightningdesignsystem.com/2e1ef8501/p/591960-global-styling-hooks