테마 적용
Lily 컴포넌트는 안정적인 클래스 훅을 가지며 CSS가 전혀 없으므로, 테마는 그저 스타일시트입니다. 이 튜토리얼은 "파일 하나 링크하기"에서 "사용자가 런타임에 테마를 바꾸고 그것이 유지되게 하기"까지 나아갑니다.
만들 것
모양 전체를 사용자가 바꿀 수 있는 앱 — 스타일시트 하나를 링크하는 데서 시작해 유지되는 런타임 테마 전환기로 끝납니다 — 약 15분 걸립니다.
시작하기 전에
먼저 사용하는 스택의 프레임워크 튜토리얼 을 먼저 마쳐서, 테마를 입힐 작은 Lily 폼을 준비하세요. 여기 있는 내용은 일곱 프레임워크 모두에서 동작하며, 코드 예제는 Svelte와 일반 HTML로 보여 줍니다.
1단계 — 준비된 테마 링크하기
themes/ 디렉터리에는 독립된 스타일시트 45개가 들어 있습니다. 앱의 정적 자산으로 복사한 뒤 하나를 링크하세요:
<link rel="stylesheet" href="/assets/themes/united-kingdom-national-health-service-england-for-patients.css" />
대표적인 테마:
-
공공 부문 — NHS England / Scotland / Wales(각각 환자용과 실무자용 변형), GOV.UK(
united-kingdom-government-digital-service), USWDS(united-states-web-design-system). - 벤더에서 영감을 받은 테마 —
adobe-spectrum,mozilla-protocol. -
범용 —
light,dark,nord,dracula,wireframe,corporate,synthwave, 그리고 그 밖에도 많습니다.
작동 확인: 페이지를 새로 고칩니다. 프레임워크 튜토리얼에서 만든 같은 마크업이 이제 버튼, 입력, 레이블, 포커스 링까지 완전히 스타일링되어 있습니다. HTML 한 줄이 그 일을 했고, 컴포넌트는 모두 그대로입니다.
2단계 — 무엇이든 재정의하기
테마 셀렉터는 다음으로 감싸져 있습니다: :where(...)명시도가 0이므로 직접 작성한 규칙이 항상 이깁니다. 간단합니다:
/* After the theme link: your brand button, everything else themed */
.button {
background: #7c3aed;
border-radius: 9999px;
}
3단계 — theme-picker로 하는 런타임 전환
theme-picker 헬퍼는 아이콘 버튼 + 리스트박스로 된 헤드리스 컴포넌트이며 테마의 전체 수명 주기를 맡습니다. 관리되는 하나의 <link>
를 바꿔서 선택한 스타일시트를 불러오고(활성 테마만 가져옵니다), 문서에
data-theme="{slug}" 를 설정하며, 선택적으로 다음에 유지합니다: localStorage. 여기서는 Svelte로 보여 줍니다. React, Vue, Angular, HTML, Nunjucks, Blazor 포트도 계약 단위로 똑같이 맞춰져 있습니다:
<script>
import ThemePicker from "@lilydesignsystem/svelte-theme-picker";
</script>
<ThemePicker
label="Theme"
themesUrl="/assets/themes/"
themes={["light", "dark", "nord", "wireframe"]}
storageKey="my-app-theme"
/>
이것이 통합의 전부입니다. 키보드 동작은 WAI-ARIA APG 리스트박스 패턴을 따르며, 컨트롤 자체는 헤드리스(클래스 훅
.theme-picker)이므로 활성 테마가 무엇이든 그대로 적용됩니다.
2026-08-29 확인 완료: 이 스니펫 그대로를 공개된 0.1.1 패키지를 대상으로 다음을 통해 컴파일했습니다:
svelte/server.
4단계 — 자신의 CSS에서 테마에 반응하기
헬퍼가 문서 루트에 data-theme 를 설정하므로 자신의 스타일에서 그 값으로 분기할 수 있습니다:
[data-theme="dark"] .site-logo { filter: invert(1); }
서버 렌더링 관련 참고
이 헬퍼는 모든 DOM 쓰기를 프레임워크의 마운트/이펙트 수명 주기 안에서 수행하므로 구조적으로 SSR에 안전합니다. 첫 페인트 때의 깜빡임을 피하려면, 서버에서(예: 쿠키를 보고) 초기 테마의 <link> 와
data-theme 를 렌더링하세요. Svelte 헬퍼 저장소에는 실행 가능한 SvelteKit 쿠키 예제가 있고, 다른 카탈로그도 각자의 스택에 맞는 같은 패턴을 문서화하고 있습니다.
다음 단계
- 환경설정 헬퍼 — 언어, 텍스트 크기, 공유, 날짜/시간 입력에도 같은 패턴이 쓰입니다.
- 테마 기여하기 — 각 테마는 클래스 훅을 대상으로 하는 독립된 스타일시트 하나입니다. 다음을 보세요: 기여 안내.
진행하다가 궁금한 점이 있다면 도움말 페이지 에 답이 많이 있습니다. 어떤 단계가 더 명확해질 수 있다면 알려 주세요 . 기꺼이 튜토리얼을 개선하겠습니다.