기업용 소프트웨어 · 새 리소스

Salesforce Lightning 디자인 시스템.

밀도 높은 레코드 작업을 위한 Lightning 블루프린트 가이드입니다. 실제 간격과 타이포그래피, 의미 기반 색상, 편집 가능한 케이스 작업 공간, 필드 유효성 검사, 로컬 변경 사항을 반영하는 활동 기록을 제공합니다.

OpenDesign 가이드8개 챕터참조 항목 40개독자적 적용 가이드
01

Salesforce Lightning 디자인 시스템 인터페이스 미리보기

우선순위나 상태를 변경하고, 업데이트 메모를 검증한 뒤 로컬 활동 항목을 저장하세요. 이후 초안을 취소해도 저장된 레코드는 변경되지 않습니다.

사례를 수정하고 로컬 활동을 검토하세요전체 예시 열기
네이티브 SLDS 2.264.1 CSS 및 패키지 에셋, 자체 제작한 접근성 지원 HTML 및 JavaScript입니다. Salesforce API 또는 Lightning 런타임은 사용하지 않습니다. · 구현 레퍼런스
02

Salesforce Lightning 디자인 시스템 디자인 참조

공개된 @salesforce-ux/design-system 2.264.1 네이티브 CSS 및 ui-force 토큰 내보내기입니다. 고정된 클래식 블루프린트 참조이며, 최신 SLDS 2 디자인 언어나 Lightning Web Components 런타임과 호환된다는 의미는 아닙니다. 과거의 업스트림 저장소는 보관 처리되었습니다.

레코드 표면 및 의미 기반 텍스트

출처
이름 / 규칙값 / 구성용도
COLOR_BACKGROUNDrgb(243, 243, 243)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BACKGROUND_ALTrgb(255, 255, 255)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_TEXT_DEFAULTrgb(3, 45, 96)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_TEXT_WEAKrgb(116, 116, 116)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BORDERrgb(201, 201, 201)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BORDER_ERRORrgb(234, 0, 30)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BORDER_SELECTIONrgb(1, 118, 211)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BACKGROUND_BUTTON_BRANDrgb(1, 118, 211)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BACKGROUND_BUTTON_BRAND_HOVERrgb(1, 68, 134)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.
COLOR_BACKGROUND_BUTTON_BRAND_ACTIVErgb(3, 45, 96)공개 패키지 참조입니다. 브랜드 색상을 어디에나 일괄 적용하지 말고 지정된 텍스트, 표면 또는 동작의 역할을 유지하세요.

클래식 간격 스케일

출처
이름 / 규칙값 / 구성용도
SPACING_X_SMALL0.5rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_XXX_SMALL0.125rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_XX_SMALL0.25rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_SMALL0.75rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_MEDIUM1rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_NONE0클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_X_LARGE2rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_XX_LARGE3rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.
SPACING_LARGE1.5rem클래식 SPACING_* 내보내기입니다. 별도의 컴팩트 VAR_SPACING_* 세트가 아닙니다.

글꼴 크기 체계

출처
이름 / 규칙값 / 구성용도
FONT_SIZE_10.625rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_20.75rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_30.8125rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_40.875rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_51rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_61.125rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_71.25rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_81.5rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_91.75rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_102rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.
FONT_SIZE_112.625rem역할에 따라 텍스트 크기를 선택하고, 사례 메모와 필드 레이블의 가독성을 유지하세요.

모서리 반경

출처
이름 / 규칙값 / 구성용도
BORDER_RADIUS_SMALL0.125rem공개된 모서리 반경 참조입니다. 원형 상태 표시는 직사각형 폼 컨트롤과 다릅니다.
BORDER_RADIUS_MEDIUM0.25rem공개된 모서리 반경 참조입니다. 원형 상태 표시는 직사각형 폼 컨트롤과 다릅니다.
BORDER_RADIUS_LARGE0.5rem공개된 모서리 반경 참조입니다. 원형 상태 표시는 직사각형 폼 컨트롤과 다릅니다.
BORDER_RADIUS_CIRCLE50%공개된 모서리 반경 참조입니다. 원형 상태 표시는 직사각형 폼 컨트롤과 다릅니다.

네이티브 CSS 블루프린트 구조

출처
이름 / 규칙값 / 구성용도
slds-page-headerRecord context편집 폼 위에 사례 식별 정보와 요약을 배치하세요.
slds-cardGrouped content region사례 세부 정보와 활동은 별도의 의미 영역으로 구분하세요.
slds-form-elementLabel + control + help편집 가능한 각 값을 일관된 필드로 감싸세요.
slds-has-errorInvalid field modifieraria-invalid 및 구체적인 오류 메시지와 함께 설정하세요.
slds-button_brandPrimary action로컬 업데이트를 저장하세요. 클래스는 스타일을 제공할 뿐, 데이터를 저장하지 않습니다.
slds-button_neutralSecondary action초안을 취소하고 마지막으로 저장된 로컬 값으로 복원하세요.
03

Salesforce Lightning 디자인 시스템 전체 가이드

실제 인터페이스를 위해 이 시스템을 선택하고 적용하고 검토하는 실용 가이드.

DESIGN-salesforce-lightning.md

완전한 안내와 구현 시작점, 소스 링크.

가이드 다운로드

Salesforce Lightning 디자인 시스템 레코드 레이아웃 및 컨텍스트

레코드 식별 정보를 로컬 작업보다 위에 배치하세요

페이지 헤더에는 사례 번호, 제목, 계정, 담당자가 표시됩니다. 이 값들은 사용자가 필드를 변경하기 전에 객체를 식별해 줍니다. 상태 배지는 저장된 로컬 레코드의 요약이므로, 저장되지 않은 선택 값에 따라 바뀌지 않고 저장할 때 변경됩니다.

이 OpenDesign 가이드에서

세부 정보와 활동을 구분하세요

넓은 영역에는 고객 맥락과 편집 양식이 함께 표시됩니다. 보조 영역에는 시간순으로 정렬된 기록이 표시됩니다. 이렇게 영역을 분리하면 다른 화면으로 이동하지 않고도 요청된 작업과 이미 기록된 변경 사항을 비교할 수 있습니다. 모바일 레이아웃에서는 의미상 같은 순서로 영역이 세로로 쌓입니다.

Salesforce Lightning 디자인 시스템의 시맨틱 색상과 상태

토큰 이름을 역할에 따라 읽기

ui-force 내보내기에는 기본 텍스트, 약한 강조의 텍스트, 선택된 테두리, 브랜드 버튼 배경이 구분되어 있습니다. 이 예시에서는 본문 텍스트를 어둡게, 메타데이터를 절제된 스타일로, 기본 동작 버튼을 파란색으로 유지합니다. 빨간색은 잘못된 입력란과 이를 바로잡는 방법을 안내하는 메시지에 사용하며, 저장되지 않은 모든 값에 사용하지 않습니다.

색상 외의 방법으로도 상태를 전달하기

요약과 새 활동 항목에는 우선순위와 상태를 텍스트로 표시합니다. 오류 상태에는 기본 slds-has-error 수정자, aria-invalid, 텍스트 영역에 연결된 메시지를 함께 사용합니다. 로컬 확인 메시지는 상태 영역에 텍스트로 표시합니다. 초록색 강조만으로는 사용자에게 무엇이 저장되었는지 알릴 수 없습니다.

Salesforce Lightning 디자인 시스템의 글자 크기 단계와 레코드 밀도

큰 제목에 의존하지 않고 시각적 계층 구조 만들기

공개된 번호형 글자 크기 단계는 0.625rem에서 시작해 2.625rem까지 이어집니다. 케이스 작업 영역의 모든 부분에 가장 큰 디스플레이 크기를 사용할 필요는 없습니다. 기본 페이지 헤더의 제목은 레코드를 식별하고, 카드 제목은 영역을 구분하며, 일반 본문 텍스트는 고객 요청과 메모를 전달합니다.

긴 레코드 제목을 온전히 표시하기

맞춤 레이아웃에서는 화면 폭이 좁아져도 페이지 제목이 잘리지 않고 다음 줄로 이어집니다. 메타데이터도 여러 줄로 표시할 수 있습니다. 계정 이름이 길다는 이유로 모든 텍스트 크기를 줄이지 마세요. 어디에서 잘라도 전체 텍스트를 안전하게 확인할 수 있는지 판단하기 전에 실제에 가까운 제목과 담당자 이름의 길이로 테스트하세요.

Salesforce Lightning 디자인 시스템의 간격과 블루프린트 구조

클래식 간격 내보내기와 변수 간격 내보내기를 혼용하지 않기

이 가이드에는 ui-force의 SPACING_*이 나열되어 있습니다. 별도의 var-spacing 내보내기에는 다른 압축 값이 포함되어 있으며, VAR_SPACING_MEDIUM은 SPACING_MEDIUM과 같은 기준값이 아닙니다. 이름이 비슷하다는 이유만으로 값을 혼용하면 양식의 간격이 고르지 않을 수 있습니다. 사용할 밀도 체계를 선택하고 해당 체계의 출처를 일관되게 유지하세요.

필드 래퍼를 일관되게 사용하기

Salesforce Lightning 디자인 시스템의 초안 및 저장된 레코드 동작

저장된 레코드와 컨트롤 값을 별도로 관리하기

스크립트는 마지막으로 저장된 우선순위와 상태를 레코드 객체에 보관합니다. 선택 항목을 편집해도 초안만 변경됩니다. 저장하면 해당 값을 객체에 복사하고, 요약을 업데이트한 뒤 활동 항목을 추가합니다. 따라서 여러 번 성공적으로 수정한 뒤에도 초안 버리기를 의미 있게 사용할 수 있습니다.

백엔드 성공을 임의로 가정하지 않기

이 예시에는 레코드 ID 조회, 권한 모델, API 또는 데이터베이스가 없습니다. 버튼과 확인 메시지에는 로컬 작업임이 명시되어 있습니다. 실제 Salesforce 통합에서 확정된 레코드 상태를 업데이트하려면 적절한 데이터 API와 서버 응답이 필요합니다. CSS 클래스만으로는 이를 보장할 수 없습니다.

Salesforce Lightning 디자인 시스템의 필드 유효성 검사와 활동

메모에 변경 내용을 설명하기

작성된 규칙은 공백을 제거한 뒤 10자 이상이어야 하며 텍스트 영역은 300자로 제한됩니다. 메모가 비어 있거나 너무 짧으면 레코드를 변경하지 않고 필드 오류를 표시한 뒤 메모 입력란으로 포커스를 이동합니다. 입력을 수정하면 이전 오류가 지워지고, 다음에 저장할 때 현재 값을 다시 검증합니다.

  1. 메모 없이 제출해 저장된 요약 값이 바뀌지 않는지 확인하세요.
  2. 적절한 메모를 입력하고 저장한 뒤 가장 최근 활동 항목을 확인하세요.
  3. 필드를 다시 변경한 뒤 초안을 버리고 마지막으로 저장된 값으로 복원되는지 확인하세요.

읽기 쉬운 변경 항목 추가하기

로컬 업데이트가 성공하면 저장된 상태와 우선순위로 활동 제목을 만들고, 그 아래에 메모를 입력한 그대로 텍스트로 표시합니다. 새 항목은 맨 앞에 추가되어 가장 최근 변경 사항이 먼저 보입니다. 메모는 HTML로 해석되지 않으며, 처음부터 표시된 정적 활동은 사용자가 로컬에서 추가한 항목 아래에 유지됩니다.

Salesforce Lightning 디자인 시스템의 접근성 높은 양식과 복구

실제 레이블과 명시적인 설명 사용하기

선택 항목과 텍스트 영역에는 for와 id로 연결된 표시 레이블이 있습니다. 메모 입력란은 도움말 및 오류 텍스트를 참조하며, 필수 입력 표시에는 읽을 수 있는 title이 지정되어 있습니다. 기본 동작과 초안 버리기 동작에는 각각 적절한 submit 및 button 유형의 버튼을 사용해 초안을 버릴 때 실수로 양식이 제출되지 않도록 합니다.

초안을 버린 뒤 예측 가능한 위치로 돌아가기

버리기를 선택하면 저장된 우선순위와 상태를 복원하고, 메모와 필드 오류를 지운 뒤 우선순위 컨트롤에 포커스를 둡니다. 활동 기록을 삭제하거나 레코드를 처음 상태로 되돌리지는 않습니다. 한 번 저장한 후 다른 변경을 시도했다가 두 번째 초안을 취소할 때 이 구분이 중요합니다.

Salesforce Lightning 디자인 시스템의 CSS 통합 및 버전 범위

게시된 스타일 패키지 설치하기

전체 소스는 버전이 고정된 CSS 배포 패키지와 소규모 애플리케이션 스타일시트를 가져옵니다. Vite가 패키지의 글꼴 및 이미지 URL을 처리합니다. 그런 다음 HTML과 JavaScript가 레코드 동작을 제공합니다. 이는 CSS 블루프린트 구현이며 lightning-record-edit-form을 감싸는 래퍼가 아닙니다.

  • 기본 패키지 CSS는 필드, 버튼, 카드의 모양을 제공합니다.
  • 기존 HTML는 레코드 구조와 레이블을 제공합니다.
  • 기존 JavaScript는 초안 상태, 유효성 검사, 로컬 활동을 관리합니다.

보관된 소스를 버전이 명시된 참고 자료로 다루기

Salesforce Lightning 디자인 시스템 구성 요소 예시

index.html — 전체 케이스 작업 공간

시맨틱 HTML으로 구현한 레코드 요약, 양식 및 초기 활동 내역입니다.

html
<!doctype html>
<html lang="en">
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Local case workspace</title>
<body>
<main class="slds-example">
  <header class="slds-page-header">
    <p class="slds-text-title_caps">Service workspace · fictional record</p>
    <div class="record-title">
      <div>
        <h1 class="slds-page-header__title">
          Case 004218 · Delivery address update
        </h1>
        <p class="slds-text-body_small">
          Northstar Studio · Opened today · Owner: Maya Chen
        </p>
      </div>
      <span id="status-badge" class="slds-badge">New</span>
    </div>
  </header>
  <div class="record-grid">
    <section class="slds-card">
      <div class="slds-card__header">
        <h2 class="slds-card__header-title">Case details</h2>
      </div>
      <div class="slds-card__body slds-card__body_inner">
        <div class="summary">
          <div>
            <span class="slds-text-title">Contact</span>
            <p>Alex Morgan</p>
          </div>
          <div>
            <span class="slds-text-title">Channel</span>
            <p>Email</p>
          </div>
          <div>
            <span class="slds-text-title">Priority</span>
            <p id="read-priority">Medium</p>
          </div>
          <div>
            <span class="slds-text-title">Status</span>
            <p id="read-status">New</p>
          </div>
        </div>
        <div class="slds-box slds-theme_shade slds-m-top_medium">
          <h3 class="slds-text-heading_small">Customer request</h3>
          <p class="slds-m-top_small">
            Please update the delivery location for order NS-1842 before it
            leaves the warehouse. The contact is available to confirm the new
            address.
          </p>
        </div>
        <form id="case-form" class="slds-m-top_large" novalidate>
          <h3 class="slds-text-heading_small slds-m-bottom_medium">
            Update the local case
          </h3>
          <div class="field-grid">
            <div class="slds-form-element">
              <label class="slds-form-element__label" for="priority"
                >Priority</label
              >
              <div class="slds-form-element__control">
                <div class="slds-select_container">
                  <select class="slds-select" id="priority">
                    <option>Low</option>
                    <option selected>Medium</option>
                    <option>High</option>
                  </select>
                </div>
              </div>
            </div>
            <div class="slds-form-element">
              <label class="slds-form-element__label" for="case-status"
                >Status</label
              >
              <div class="slds-form-element__control">
                <div class="slds-select_container">
                  <select class="slds-select" id="case-status">
                    <option>New</option>
                    <option>Working</option>
                    <option>Escalated</option>
                    <option>Closed</option>
                  </select>
                </div>
              </div>
            </div>
          </div>
          <div id="note-field" class="slds-form-element slds-m-top_medium">
            <label class="slds-form-element__label" for="case-note"
              ><abbr class="slds-required" title="required">*</abbr> Update
              note</label
            >
            <div class="slds-form-element__control">
              <textarea
                class="slds-textarea"
                id="case-note"
                rows="3"
                maxlength="300"
                aria-describedby="note-help note-error"
              ></textarea>
            </div>
            <p id="note-help" class="slds-form-element__help">
              Explain the change in 10–300 characters. Nothing is sent to
              Salesforce.
            </p>
            <p id="note-error" class="slds-form-element__help" hidden>
              Enter an update note of at least 10 characters.
            </p>
          </div>
          <div class="form-actions">
            <button
              type="button"
              id="cancel"
              class="slds-button slds-button_neutral"
            >
              Discard draft</button
            ><button type="submit" class="slds-button slds-button_brand">
              Save local update
            </button>
          </div>
          <p id="save-result" class="slds-m-top_small" role="status"></p>
        </form>
      </div>
    </section>
    <aside class="slds-card">
      <div class="slds-card__header">
        <h2 class="slds-card__header-title">Case activity</h2>
      </div>
      <div class="slds-card__body slds-card__body_inner">
        <p class="slds-text-body_small slds-m-bottom_medium">
          Newest updates first
        </p>
        <ol id="activity" class="activity">
          <li>
            <span class="activity-dot"></span>
            <div>
              <h3 class="slds-text-heading_small">Case opened</h3>
              <p>Customer requested a delivery address change.</p>
              <small>Initial example activity</small>
            </div>
          </li>
        </ol>
      </div>
    </aside>
  </div>
  <footer>
    Native SLDS 2.264.1 CSS with original HTML and JavaScript. Local
    demonstration; no Salesforce record or message is created.
  </footer>
</main>

<script type="module" src="/src/main.js"></script>
</body></html>

코드 참조

  • Vite 프로젝트 루트에 저장하세요.

main.js — 초안, 유효성 검사 및 활동 내역

전체 애플리케이션 동작과 네이티브 CSS 가져오기입니다.

js
import "@salesforce-ux/design-system/assets/styles/salesforce-lightning-design-system.css";
import "./slds.css";
let record = { priority: "Medium", status: "New" };
const form = document.querySelector("#case-form"),
  priority = document.querySelector("#priority"),
  status = document.querySelector("#case-status"),
  note = document.querySelector("#case-note"),
  field = document.querySelector("#note-field"),
  error = document.querySelector("#note-error"),
  result = document.querySelector("#save-result");
function clearError() {
  field.classList.remove("slds-has-error");
  error.hidden = true;
  note.removeAttribute("aria-invalid");
  result.textContent = "";
}
form.addEventListener("input", clearError);
form.addEventListener("submit", (e) => {
  e.preventDefault();
  const text = note.value.trim();
  if (text.length < 10) {
    field.classList.add("slds-has-error");
    error.hidden = false;
    note.setAttribute("aria-invalid", "true");
    note.focus();
    return;
  }
  record = { priority: priority.value, status: status.value };
  document.querySelector("#read-priority").textContent = record.priority;
  document.querySelector("#read-status").textContent = record.status;
  document.querySelector("#status-badge").textContent = record.status;
  const li = document.createElement("li"),
    dot = document.createElement("span"),
    body = document.createElement("div"),
    h = document.createElement("h3"),
    p = document.createElement("p"),
    small = document.createElement("small");
  dot.className = "activity-dot";
  h.className = "slds-text-heading_small";
  h.textContent = record.status + " · " + record.priority + " priority";
  p.textContent = text;
  small.textContent = "Local update · this session";
  body.append(h, p, small);
  li.append(dot, body);
  document.querySelector("#activity").prepend(li);
  note.value = "";
  clearError();
  result.textContent = "Local case updated. No server request was made.";
});
document.querySelector("#cancel").addEventListener("click", () => {
  priority.value = record.priority;
  status.value = record.status;
  note.value = "";
  clearError();
  priority.focus();
});

코드 참조

  • src/main.js로 저장하세요. 모든 업데이트는 로컬에 유지됩니다.

slds.css — 반응형 구성

기존 레코드 그리드, 기록 장식 및 모바일 레이아웃만 포함합니다.

CSS
[hidden] { display: none !important; }
body {
  margin: 0;
}
.slds-example {
  background: #f3f3f3;
  padding: 24px;
  min-height: 680px;
}
.record-title {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 24px;
  margin-top: 12px;
}
.record-title h1 {
  white-space: normal;
}
.record-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.7fr) minmax(260px, 1fr);
  gap: 20px;
  margin-top: 20px;
}
.record-grid > .slds-card {
  margin: 0;
  min-width: 0;
}
.summary,
.field-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.summary p {
  font-weight: 600;
  margin-top: 4px;
}
.form-actions {
  display: flex;
  justify-content: flex-end;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 20px;
}
.activity {
  list-style: none;
  padding: 0;
  margin: 0;
}
.activity li {
  display: flex;
  gap: 12px;
  padding-bottom: 24px;
  position: relative;
}
.activity li:not(:last-child):before {
  content: "";
  position: absolute;
  left: 5px;
  top: 12px;
  bottom: 0;
  border-left: 1px solid #c9c9c9;
}
.activity-dot {
  flex: none;
  width: 11px;
  height: 11px;
  background: #0176d3;
  border-radius: 50%;
  margin-top: 5px;
}
.activity p {
  margin: 8px 0;
}
.activity small {
  color: #747474;
}
.slds-example footer {
  font-size: 12px;
  color: #747474;
  margin-top: 20px;
}
.slds-form-element.slds-has-error #note-help {
  color: #444;
}
@media (max-width: 760px) {
  .slds-example {
    padding: 12px;
  }
  .record-grid {
    grid-template-columns: 1fr;
  }
  .record-title {
    gap: 12px;
  }
  .field-grid {
    grid-template-columns: 1fr;
  }
  .form-actions {
    justify-content: flex-start;
  }
}

코드 참조

  • src/slds.css로 저장하세요. 패키지 스타일은 별도로 유지됩니다.
04

Salesforce Lightning 디자인 시스템 에이전트 설정

구현 시작점

고정된 네이티브 CSS 예제이며, Salesforce 조직에 배포하는 용도가 아닙니다. 번들 자산을 재배포할 때 패키지 및 자산 고지 사항을 그대로 유지하세요.

sh
npm create vite@latest slds-case -- --template vanilla
cd slds-case
npm install
npm install @salesforce-ux/[email protected]
# Replace index.html; add src/main.js and src/slds.css from the complete examples.
npm run dev

프로젝트를 위한 프롬프트

에이전트 프롬프트
고정된 SLDS CSS 블루프린트를 사용해 집중도 높은 케이스 작업 공간을 만드세요. 레코드 식별 정보, 고객 정보, 저장된 상태 및 편집 초안을 서로 구분하세요. 정확한 필드 구조, 실제 토큰 참조 및 전체 소스를 여기서 사용하세요. 요약을 변경하기 전에 메모의 유효성을 검사하고, 초안을 취소한 뒤에도 로컬 활동 내역을 유지하세요. Salesforce 백엔드에 연결된 것처럼 표현하지 마세요.
05

Salesforce Lightning 디자인 시스템 출처 및 범위

고정된 SLDS CSS 패키지에 대한 OpenDesign 가이드입니다. 미리보기는 원본 HTML 및 JavaScript, 가상의 케이스 데이터와 로컬 상태를 사용해 네이티브 CSS로 구현했습니다. Lightning Web Components를 불러오거나 Salesforce에 연결하지 않습니다. 업스트림 저장소는 보관 처리되었습니다. 프로덕션 작업에는 최신 Salesforce 플랫폼 지침을 확인하세요.